Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
kt-keystone
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Matrix
kt-keystone
Commits
9366cc51
提交
9366cc51
authored
6月 21, 2022
作者:
黄承天
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(user): 分割了对禅道数据源的依赖 现在禅道数据源为可拆卸
上级
3157c085
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
130 行增加
和
67 行删除
+130
-67
pom.xml
kt-user/pom.xml
+5
-12
KsProjectMapper.java
...rc/main/java/org/matrix/local/mapper/KsProjectMapper.java
+0
-2
KsUserMapper.java
...r/src/main/java/org/matrix/local/mapper/KsUserMapper.java
+0
-2
KsUserProjectMapper.java
...ain/java/org/matrix/local/mapper/KsUserProjectMapper.java
+0
-2
IUserService.java
.../src/main/java/org/matrix/local/service/IUserService.java
+7
-0
UserService.java
...r/src/main/java/org/matrix/local/service/UserService.java
+12
-10
ChangeMapper.java
.../src/main/java/org/matrix/remote/mapper/ChangeMapper.java
+0
-2
ZtProjectMapper.java
...c/main/java/org/matrix/remote/mapper/ZtProjectMapper.java
+0
-2
ZtUserMapper.java
.../src/main/java/org/matrix/remote/mapper/ZtUserMapper.java
+0
-2
ZtUserViewMapper.java
.../main/java/org/matrix/remote/mapper/ZtUserViewMapper.java
+0
-3
DataAllCollector.java
...main/java/org/matrix/remote/service/DataAllCollector.java
+20
-3
DataTriggerCollector.java
.../java/org/matrix/remote/service/DataTriggerCollector.java
+11
-0
TransHelper.java
.../src/main/java/org/matrix/remote/service/TransHelper.java
+5
-0
TriggerInitial.java
...c/main/java/org/matrix/remote/service/TriggerInitial.java
+11
-2
DataCollectorTask.java
...c/main/java/org/matrix/remote/task/DataCollectorTask.java
+44
-13
application.yml
kt-user/src/main/resources/application.yml
+5
-8
KtZentaoApplicationTests.java
...st/java/org/matrix/ktzentao/KtZentaoApplicationTests.java
+10
-4
没有找到文件。
kt-user/pom.xml
浏览文件 @
9366cc51
...
@@ -13,6 +13,11 @@
...
@@ -13,6 +13,11 @@
<packaging>
jar
</packaging>
<packaging>
jar
</packaging>
<dependencies>
<dependencies>
<dependency>
<groupId>
org.matrix
</groupId>
<artifactId>
kt-base
</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-mongodb
</artifactId>
<artifactId>
spring-boot-starter-data-mongodb
</artifactId>
...
@@ -66,18 +71,6 @@
...
@@ -66,18 +71,6 @@
<artifactId>
dynamic-datasource-spring-boot-starter
</artifactId>
<artifactId>
dynamic-datasource-spring-boot-starter
</artifactId>
<version>
3.5.0
</version>
<version>
3.5.0
</version>
</dependency>
</dependency>
<!--swagger-->
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger2
</artifactId>
<version>
2.9.2
</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger-ui
</artifactId>
<version>
2.9.2
</version>
</dependency>
<dependency>
<dependency>
<groupId>
jakarta.validation
</groupId>
<groupId>
jakarta.validation
</groupId>
<artifactId>
jakarta.validation-api
</artifactId>
<artifactId>
jakarta.validation-api
</artifactId>
...
...
kt-user/src/main/java/org/matrix/local/mapper/KsProjectMapper.java
浏览文件 @
9366cc51
package
org
.
matrix
.
local
.
mapper
;
package
org
.
matrix
.
local
.
mapper
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.Project
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
* @author matrix
* @author matrix
* @since 2022-01-15
* @since 2022-01-15
*/
*/
@DS
(
"master"
)
@Repository
@Repository
public
interface
KsProjectMapper
extends
BaseMapper
<
Project
>
{
public
interface
KsProjectMapper
extends
BaseMapper
<
Project
>
{
...
...
kt-user/src/main/java/org/matrix/local/mapper/KsUserMapper.java
浏览文件 @
9366cc51
package
org
.
matrix
.
local
.
mapper
;
package
org
.
matrix
.
local
.
mapper
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.User
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
* @author matrix
* @author matrix
* @since 2022-01-15
* @since 2022-01-15
*/
*/
@DS
(
"master"
)
@Repository
@Repository
public
interface
KsUserMapper
extends
BaseMapper
<
User
>
{
public
interface
KsUserMapper
extends
BaseMapper
<
User
>
{
}
}
kt-user/src/main/java/org/matrix/local/mapper/KsUserProjectMapper.java
浏览文件 @
9366cc51
package
org
.
matrix
.
local
.
mapper
;
package
org
.
matrix
.
local
.
mapper
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.matrix.local.entity.UserProject
;
import
org.matrix.local.entity.UserProject
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
* @author matrix
* @author matrix
* @since 2022-01-15
* @since 2022-01-15
*/
*/
@DS
(
"master"
)
@Repository
@Repository
public
interface
KsUserProjectMapper
extends
BaseMapper
<
UserProject
>
{
public
interface
KsUserProjectMapper
extends
BaseMapper
<
UserProject
>
{
}
}
kt-user/src/main/java/org/matrix/local/service/IUserService.java
0 → 100644
浏览文件 @
9366cc51
package
org
.
matrix
.
local
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
org.matrix.local.entity.User
;
public
interface
IUserService
extends
IService
<
User
>
{
}
kt-user/src/main/java/org/matrix/local/service/UserService.java
浏览文件 @
9366cc51
...
@@ -2,12 +2,13 @@ package org.matrix.local.service;
...
@@ -2,12 +2,13 @@ package org.matrix.local.service;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
lombok.SneakyThrows
;
import
lombok.SneakyThrows
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.bson.Document
;
import
org.bson.Document
;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.UserProject
;
import
org.matrix.local.entity.config.UserConfig
;
import
org.matrix.local.entity.config.UserConfig
;
import
org.matrix.local.entity.UserProject
;
import
org.matrix.local.entity.vo.LoginInfo
;
import
org.matrix.local.entity.vo.LoginInfo
;
import
org.matrix.local.entity.vo.UserInfo
;
import
org.matrix.local.entity.vo.UserInfo
;
import
org.matrix.local.enums.ConfigType
;
import
org.matrix.local.enums.ConfigType
;
...
@@ -38,7 +39,7 @@ import static java.util.Objects.nonNull;
...
@@ -38,7 +39,7 @@ import static java.util.Objects.nonNull;
*/
*/
@Slf4j
@Slf4j
@Service
@Service
public
class
UserService
{
public
class
UserService
extends
ServiceImpl
<
KsUserMapper
,
User
>
implements
IUserService
{
public
static
final
String
COLLECTION_NAME
=
"user_config"
;
public
static
final
String
COLLECTION_NAME
=
"user_config"
;
@Autowired
@Autowired
...
@@ -54,6 +55,7 @@ public class UserService {
...
@@ -54,6 +55,7 @@ public class UserService {
/**
/**
* 如果是用户的第一次配置,即库里没有配置项,则全部保存
* 如果是用户的第一次配置,即库里没有配置项,则全部保存
* ● 如果已有配置项,分为部分更新和全部更新
* ● 如果已有配置项,分为部分更新和全部更新
*
* @param userConfig 用户配置
* @param userConfig 用户配置
* @param configType 配置类型
* @param configType 配置类型
* @return 是否更新/插入成功
* @return 是否更新/插入成功
...
@@ -64,34 +66,34 @@ public class UserService {
...
@@ -64,34 +66,34 @@ public class UserService {
// 首先查询该用户是否存在,不存在就抛出异常
// 首先查询该用户是否存在,不存在就抛出异常
User
dbUser
=
ksUserMapper
.
selectById
(
userId
);
User
dbUser
=
ksUserMapper
.
selectById
(
userId
);
if
(
Objects
.
isNull
(
dbUser
)){
if
(
Objects
.
isNull
(
dbUser
))
{
throw
new
RuntimeException
(
String
.
format
(
"保存用户配置 -- 数据库里没有用户id = %d 的用户!"
,
userId
));
throw
new
RuntimeException
(
String
.
format
(
"保存用户配置 -- 数据库里没有用户id = %d 的用户!"
,
userId
));
}
}
// 如果是用户的第一次配置,即配置库里没有配置项,则全部保存
// 如果是用户的第一次配置,即配置库里没有配置项,则全部保存
Query
userQuery
=
Query
.
query
(
Criteria
.
where
(
"userId"
).
is
(
userId
));
Query
userQuery
=
Query
.
query
(
Criteria
.
where
(
"userId"
).
is
(
userId
));
boolean
firstConfig
=
!
mongoTemplate
.
exists
(
userQuery
,
"user_config"
);
boolean
firstConfig
=
!
mongoTemplate
.
exists
(
userQuery
,
"user_config"
);
if
(
firstConfig
){
if
(
firstConfig
)
{
mongoTemplate
.
save
(
userConfig
,
COLLECTION_NAME
);
mongoTemplate
.
save
(
userConfig
,
COLLECTION_NAME
);
return
true
;
return
true
;
}
else
{
}
else
{
Update
update
;
Update
update
;
if
(
configType
==
ConfigType
.
ALL
){
if
(
configType
==
ConfigType
.
ALL
)
{
log
.
info
(
"[用户配置] 正在给id = {} 的用户更新<全局>配置,新的配置是 {}"
,
userId
,
userConfig
);
log
.
info
(
"[用户配置] 正在给id = {} 的用户更新<全局>配置,新的配置是 {}"
,
userId
,
userConfig
);
Document
doc
=
new
Document
();
Document
doc
=
new
Document
();
mongoTemplate
.
getConverter
().
write
(
userConfig
,
doc
);
mongoTemplate
.
getConverter
().
write
(
userConfig
,
doc
);
update
=
Update
.
fromDocument
(
doc
);
update
=
Update
.
fromDocument
(
doc
);
mongoTemplate
.
upsert
(
userQuery
,
update
,
COLLECTION_NAME
);
mongoTemplate
.
upsert
(
userQuery
,
update
,
COLLECTION_NAME
);
return
true
;
return
true
;
}
else
{
}
else
{
// 通过反射获取userConfig的属性值
// 通过反射获取userConfig的属性值
String
propertyName
=
configType
.
getPropertyName
();
String
propertyName
=
configType
.
getPropertyName
();
Field
field
=
userConfig
.
getClass
().
getDeclaredField
(
propertyName
);
Field
field
=
userConfig
.
getClass
().
getDeclaredField
(
propertyName
);
field
.
setAccessible
(
true
);
field
.
setAccessible
(
true
);
Object
value
=
field
.
get
(
userConfig
);
Object
value
=
field
.
get
(
userConfig
);
// 更新mongo中的数据
// 更新mongo中的数据
log
.
info
(
"[用户配置] 正在给id = {} 的用户更新<{}>配置,新的{}是 {}"
,
userId
,
configType
.
getDes
(),
configType
.
getDes
(),
value
);
log
.
info
(
"[用户配置] 正在给id = {} 的用户更新<{}>配置,新的{}是 {}"
,
userId
,
configType
.
getDes
(),
configType
.
getDes
(),
value
);
update
=
Update
.
update
(
configType
.
getPropertyName
(),
value
);
update
=
Update
.
update
(
configType
.
getPropertyName
(),
value
);
mongoTemplate
.
upsert
(
userQuery
,
update
,
COLLECTION_NAME
);
mongoTemplate
.
upsert
(
userQuery
,
update
,
COLLECTION_NAME
);
return
true
;
return
true
;
...
...
kt-user/src/main/java/org/matrix/remote/mapper/ChangeMapper.java
浏览文件 @
9366cc51
package
org
.
matrix
.
remote
.
mapper
;
package
org
.
matrix
.
remote
.
mapper
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.matrix.remote.entity.Change
;
import
org.matrix.remote.entity.Change
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
...
@@ -8,7 +7,6 @@ import org.springframework.stereotype.Repository;
...
@@ -8,7 +7,6 @@ import org.springframework.stereotype.Repository;
/**
/**
* @author c
* @author c
*/
*/
@DS
(
"zentao"
)
@Repository
@Repository
public
interface
ChangeMapper
extends
BaseMapper
<
Change
>
{
public
interface
ChangeMapper
extends
BaseMapper
<
Change
>
{
}
}
kt-user/src/main/java/org/matrix/remote/mapper/ZtProjectMapper.java
浏览文件 @
9366cc51
package
org
.
matrix
.
remote
.
mapper
;
package
org
.
matrix
.
remote
.
mapper
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
org.matrix.remote.entity.ZtProject
;
import
org.matrix.remote.entity.ZtProject
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
* @author c
* @author c
* @since 2022-02-15
* @since 2022-02-15
*/
*/
@DS
(
"zentao"
)
@Repository
@Repository
public
interface
ZtProjectMapper
extends
BaseMapper
<
ZtProject
>
{
public
interface
ZtProjectMapper
extends
BaseMapper
<
ZtProject
>
{
...
...
kt-user/src/main/java/org/matrix/remote/mapper/ZtUserMapper.java
浏览文件 @
9366cc51
package
org
.
matrix
.
remote
.
mapper
;
package
org
.
matrix
.
remote
.
mapper
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
org.matrix.remote.entity.ZtUser
;
import
org.matrix.remote.entity.ZtUser
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
...
@@ -13,7 +12,6 @@ import org.springframework.stereotype.Repository;
* @author c
* @author c
* @since 2022-02-15
* @since 2022-02-15
*/
*/
@DS
(
"zentao"
)
@Repository
@Repository
public
interface
ZtUserMapper
extends
BaseMapper
<
ZtUser
>
{
public
interface
ZtUserMapper
extends
BaseMapper
<
ZtUser
>
{
...
...
kt-user/src/main/java/org/matrix/remote/mapper/ZtUserViewMapper.java
浏览文件 @
9366cc51
package
org
.
matrix
.
remote
.
mapper
;
package
org
.
matrix
.
remote
.
mapper
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
org.matrix.remote.entity.ZtUserView
;
import
org.matrix.remote.entity.ZtUserView
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
...
@@ -13,8 +12,6 @@ import org.springframework.stereotype.Repository;
...
@@ -13,8 +12,6 @@ import org.springframework.stereotype.Repository;
* @author c
* @author c
* @since 2022-02-15
* @since 2022-02-15
*/
*/
@DS
(
"zentao"
)
@Repository
@Repository
public
interface
ZtUserViewMapper
extends
BaseMapper
<
ZtUserView
>
{
public
interface
ZtUserViewMapper
extends
BaseMapper
<
ZtUserView
>
{
}
}
kt-user/src/main/java/org/matrix/remote/service/DataAllCollector.java
浏览文件 @
9366cc51
...
@@ -2,6 +2,9 @@ package org.matrix.remote.service;
...
@@ -2,6 +2,9 @@ package org.matrix.remote.service;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.matrix.actuators.datasource.DataSourceDTO
;
import
org.matrix.actuators.datasource.IDataSourceService
;
import
org.matrix.local.entity.UserProject
;
import
org.matrix.local.mapper.KsProjectMapper
;
import
org.matrix.local.mapper.KsProjectMapper
;
import
org.matrix.local.mapper.KsUserMapper
;
import
org.matrix.local.mapper.KsUserMapper
;
import
org.matrix.local.mapper.KsUserProjectMapper
;
import
org.matrix.local.mapper.KsUserProjectMapper
;
...
@@ -17,6 +20,7 @@ import org.springframework.stereotype.Service;
...
@@ -17,6 +20,7 @@ import org.springframework.stereotype.Service;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
/**
* 禅道数据全量同步工具
* 禅道数据全量同步工具
...
@@ -41,6 +45,8 @@ public class DataAllCollector {
...
@@ -41,6 +45,8 @@ public class DataAllCollector {
private
KsUserProjectMapper
ksUserProjectMapper
;
private
KsUserProjectMapper
ksUserProjectMapper
;
@Autowired
@Autowired
private
TransHelper
transHelper
;
private
TransHelper
transHelper
;
@Autowired
private
IDataSourceService
dataSourceService
;
private
List
<
ZtUser
>
ztUsers
=
new
ArrayList
<>();
private
List
<
ZtUser
>
ztUsers
=
new
ArrayList
<>();
private
List
<
ZtUserView
>
ztUserViews
=
new
ArrayList
<>();
private
List
<
ZtUserView
>
ztUserViews
=
new
ArrayList
<>();
...
@@ -71,8 +77,10 @@ public class DataAllCollector {
...
@@ -71,8 +77,10 @@ public class DataAllCollector {
* 从禅道数据库读取用户数据
* 从禅道数据库读取用户数据
*/
*/
private
void
collectUser
()
{
private
void
collectUser
()
{
dataSourceService
.
switchDataSource
(
"zentao"
);
ztUsers
.
clear
();
ztUsers
.
clear
();
ztUsers
=
ztUserMapper
.
selectList
(
Wrappers
.
lambdaQuery
());
ztUsers
=
ztUserMapper
.
selectList
(
Wrappers
.
lambdaQuery
());
dataSourceService
.
switchMainDataSource
();
}
}
...
@@ -80,24 +88,29 @@ public class DataAllCollector {
...
@@ -80,24 +88,29 @@ public class DataAllCollector {
* 从禅道数据库读取项目数据
* 从禅道数据库读取项目数据
*/
*/
private
void
collectProject
()
{
private
void
collectProject
()
{
dataSourceService
.
switchDataSource
(
"zentao"
);
ztProjects
.
clear
();
ztProjects
.
clear
();
ztProjects
=
ztProjectMapper
.
selectList
(
Wrappers
.<
ZtProject
>
lambdaQuery
()
ztProjects
=
ztProjectMapper
.
selectList
(
Wrappers
.<
ZtProject
>
lambdaQuery
()
.
eq
(
ZtProject:
:
getDeleted
,
"0"
)
.
eq
(
ZtProject:
:
getDeleted
,
"0"
)
.
eq
(
ZtProject:
:
getProject
,
0
));
.
eq
(
ZtProject:
:
getProject
,
0
));
dataSourceService
.
switchMainDataSource
();
}
}
/**
/**
* 从禅道数据库读取用户相关项目关系数据
* 从禅道数据库读取用户相关项目关系数据
*/
*/
private
void
collectUserView
()
{
private
void
collectUserView
()
{
dataSourceService
.
switchDataSource
(
"zentao"
);
ztUserViews
.
clear
();
ztUserViews
.
clear
();
ztUserViews
=
ztUserViewMapper
.
selectList
(
Wrappers
.
lambdaQuery
());
ztUserViews
=
ztUserViewMapper
.
selectList
(
Wrappers
.
lambdaQuery
());
dataSourceService
.
switchMainDataSource
();
}
}
/**
/**
* 将用户数据保存到本地
* 将用户数据保存到本地
*/
*/
private
void
saveUser
()
{
private
void
saveUser
()
{
dataSourceService
.
switchMainDataSource
();
ksUserMapper
.
delete
(
Wrappers
.
lambdaQuery
());
ksUserMapper
.
delete
(
Wrappers
.
lambdaQuery
());
ztUsers
.
stream
()
ztUsers
.
stream
()
.
map
(
transHelper:
:
user
)
.
map
(
transHelper:
:
user
)
...
@@ -108,6 +121,7 @@ public class DataAllCollector {
...
@@ -108,6 +121,7 @@ public class DataAllCollector {
* 将项目数据保存到本地
* 将项目数据保存到本地
*/
*/
private
void
saveProject
()
{
private
void
saveProject
()
{
dataSourceService
.
switchMainDataSource
();
ksProjectMapper
.
delete
(
Wrappers
.
lambdaQuery
());
ksProjectMapper
.
delete
(
Wrappers
.
lambdaQuery
());
ztProjects
.
stream
()
ztProjects
.
stream
()
.
map
(
transHelper:
:
project
)
.
map
(
transHelper:
:
project
)
...
@@ -118,10 +132,13 @@ public class DataAllCollector {
...
@@ -118,10 +132,13 @@ public class DataAllCollector {
* 将用户项目关系数据保存到本地
* 将用户项目关系数据保存到本地
*/
*/
private
void
saveUserProject
()
{
private
void
saveUserProject
()
{
ksUserProjectMapper
.
delete
(
Wrappers
.
lambdaQuery
()
);
dataSourceService
.
switchDataSource
(
"zentao"
);
ztUserViews
.
stream
()
List
<
UserProject
>
userProjectList
=
ztUserViews
.
stream
()
.
flatMap
(
ztUserView
->
transHelper
.
userProjects
(
ztUserView
).
stream
())
.
flatMap
(
ztUserView
->
transHelper
.
userProjects
(
ztUserView
).
stream
())
.
forEach
(
ksUserProjectMapper:
:
insert
);
.
collect
(
Collectors
.
toList
());
dataSourceService
.
switchMainDataSource
();
ksUserProjectMapper
.
delete
(
Wrappers
.
lambdaQuery
());
userProjectList
.
forEach
(
ksUserProjectMapper:
:
insert
);
}
}
}
}
kt-user/src/main/java/org/matrix/remote/service/DataTriggerCollector.java
浏览文件 @
9366cc51
...
@@ -2,6 +2,7 @@ package org.matrix.remote.service;
...
@@ -2,6 +2,7 @@ package org.matrix.remote.service;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.matrix.actuators.datasource.IDataSourceService
;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.UserProject
;
import
org.matrix.local.entity.UserProject
;
...
@@ -46,11 +47,14 @@ public class DataTriggerCollector {
...
@@ -46,11 +47,14 @@ public class DataTriggerCollector {
private
KsUserProjectMapper
ksUserProjectMapper
;
private
KsUserProjectMapper
ksUserProjectMapper
;
@Autowired
@Autowired
private
TransHelper
transHelper
;
private
TransHelper
transHelper
;
@Autowired
private
IDataSourceService
dataSourceService
;
/**
/**
* 执行一次增量同步
* 执行一次增量同步
*/
*/
public
void
execute
()
{
public
void
execute
()
{
dataSourceService
.
switchDataSource
(
"zentao"
);
Long
count
=
changeMapper
.
selectCount
(
Wrappers
.
lambdaQuery
());
Long
count
=
changeMapper
.
selectCount
(
Wrappers
.
lambdaQuery
());
boolean
hasChanges
=
count
>
0
;
boolean
hasChanges
=
count
>
0
;
if
(
hasChanges
)
{
if
(
hasChanges
)
{
...
@@ -58,6 +62,7 @@ public class DataTriggerCollector {
...
@@ -58,6 +62,7 @@ public class DataTriggerCollector {
changes
.
forEach
(
this
::
handle
);
changes
.
forEach
(
this
::
handle
);
}
}
changeMapper
.
delete
(
Wrappers
.
lambdaQuery
());
changeMapper
.
delete
(
Wrappers
.
lambdaQuery
());
dataSourceService
.
switchMainDataSource
();
}
}
//----------------------------------------private-----------------------------------------
//----------------------------------------private-----------------------------------------
...
@@ -84,8 +89,10 @@ public class DataTriggerCollector {
...
@@ -84,8 +89,10 @@ public class DataTriggerCollector {
}
}
private
void
handleUser
(
Change
change
)
{
private
void
handleUser
(
Change
change
)
{
dataSourceService
.
switchDataSource
(
"zentao"
);
Integer
id
=
Integer
.
valueOf
(
change
.
getId
());
Integer
id
=
Integer
.
valueOf
(
change
.
getId
());
ZtUser
ztUser
=
ztUserMapper
.
selectById
(
id
);
ZtUser
ztUser
=
ztUserMapper
.
selectById
(
id
);
dataSourceService
.
switchMainDataSource
();
String
type
=
change
.
getType
();
String
type
=
change
.
getType
();
switch
(
type
)
{
switch
(
type
)
{
case
"insert"
:
case
"insert"
:
...
@@ -108,8 +115,10 @@ public class DataTriggerCollector {
...
@@ -108,8 +115,10 @@ public class DataTriggerCollector {
}
}
private
void
handleProject
(
Change
change
)
{
private
void
handleProject
(
Change
change
)
{
dataSourceService
.
switchDataSource
(
"zentao"
);
Integer
id
=
Integer
.
valueOf
(
change
.
getId
());
Integer
id
=
Integer
.
valueOf
(
change
.
getId
());
ZtProject
ztProject
=
ztProjectMapper
.
selectById
(
id
);
ZtProject
ztProject
=
ztProjectMapper
.
selectById
(
id
);
dataSourceService
.
switchMainDataSource
();
String
type
=
change
.
getType
();
String
type
=
change
.
getType
();
switch
(
type
)
{
switch
(
type
)
{
case
"insert"
:
case
"insert"
:
...
@@ -132,8 +141,10 @@ public class DataTriggerCollector {
...
@@ -132,8 +141,10 @@ public class DataTriggerCollector {
}
}
private
void
handleUserView
(
Change
change
)
{
private
void
handleUserView
(
Change
change
)
{
dataSourceService
.
switchDataSource
(
"zentao"
);
String
account
=
change
.
getId
();
String
account
=
change
.
getId
();
ZtUserView
ztUserView
=
ztUserViewMapper
.
selectOne
(
Wrappers
.<
ZtUserView
>
lambdaQuery
().
eq
(
ZtUserView:
:
getAccount
,
account
));
ZtUserView
ztUserView
=
ztUserViewMapper
.
selectOne
(
Wrappers
.<
ZtUserView
>
lambdaQuery
().
eq
(
ZtUserView:
:
getAccount
,
account
));
dataSourceService
.
switchMainDataSource
();
String
type
=
change
.
getType
();
String
type
=
change
.
getType
();
switch
(
type
)
{
switch
(
type
)
{
case
"insert"
:
case
"insert"
:
...
...
kt-user/src/main/java/org/matrix/remote/service/TransHelper.java
浏览文件 @
9366cc51
package
org
.
matrix
.
remote
.
service
;
package
org
.
matrix
.
remote
.
service
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
org.matrix.actuators.datasource.IDataSourceService
;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.Project
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.entity.UserProject
;
import
org.matrix.local.entity.UserProject
;
...
@@ -30,6 +31,8 @@ public class TransHelper {
...
@@ -30,6 +31,8 @@ public class TransHelper {
private
ZtProjectMapper
ztProjectMapper
;
private
ZtProjectMapper
ztProjectMapper
;
@Autowired
@Autowired
private
KsUserMapper
ksUserMapper
;
private
KsUserMapper
ksUserMapper
;
@Autowired
private
IDataSourceService
dataSourceService
;
public
User
user
(
ZtUser
ztUser
)
{
public
User
user
(
ZtUser
ztUser
)
{
return
new
User
(
Long
.
valueOf
(
ztUser
.
getId
()),
ztUser
.
getRealname
(),
ztUser
.
getAccount
(),
ztUser
.
getPassword
());
return
new
User
(
Long
.
valueOf
(
ztUser
.
getId
()),
ztUser
.
getRealname
(),
ztUser
.
getAccount
(),
ztUser
.
getPassword
());
...
@@ -40,8 +43,10 @@ public class TransHelper {
...
@@ -40,8 +43,10 @@ public class TransHelper {
}
}
List
<
UserProject
>
userProjects
(
ZtUserView
ztUserView
)
{
List
<
UserProject
>
userProjects
(
ZtUserView
ztUserView
)
{
dataSourceService
.
switchMainDataSource
();
User
user
=
ksUserMapper
.
selectOne
(
Wrappers
.<
User
>
lambdaQuery
().
eq
(
User:
:
getAccount
,
ztUserView
.
getAccount
()));
User
user
=
ksUserMapper
.
selectOne
(
Wrappers
.<
User
>
lambdaQuery
().
eq
(
User:
:
getAccount
,
ztUserView
.
getAccount
()));
if
(
nonNull
(
user
))
{
if
(
nonNull
(
user
))
{
dataSourceService
.
switchDataSource
(
"zentao"
);
Long
userId
=
user
.
getId
();
Long
userId
=
user
.
getId
();
return
toList
(
ztUserView
.
getProjects
()).
stream
()
return
toList
(
ztUserView
.
getProjects
()).
stream
()
.
map
(
Integer:
:
parseInt
)
.
map
(
Integer:
:
parseInt
)
...
...
kt-user/src/main/java/org/matrix/remote/service/TriggerInitial.java
浏览文件 @
9366cc51
package
org
.
matrix
.
remote
.
service
;
package
org
.
matrix
.
remote
.
service
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
com.baomidou.dynamic.datasource.annotation.DS
;
import
org.matrix.actuators.datasource.IDataSourceService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -16,14 +17,14 @@ import org.springframework.stereotype.Service;
...
@@ -16,14 +17,14 @@ import org.springframework.stereotype.Service;
* PS:选择性使用
* PS:选择性使用
*/
*/
@SuppressWarnings
(
"SqlNoDataSourceInspection"
)
@SuppressWarnings
(
"SqlNoDataSourceInspection"
)
@DS
(
"zentao"
)
@Service
@Service
public
class
TriggerInitial
{
public
class
TriggerInitial
{
@Autowired
@Autowired
private
JdbcTemplate
jdbcTemplate
;
private
JdbcTemplate
jdbcTemplate
;
@Autowired
private
IDataSourceService
dataSourceService
;
/**
/**
* 创建增量数据表
* 创建增量数据表
...
@@ -33,6 +34,7 @@ public class TriggerInitial {
...
@@ -33,6 +34,7 @@ public class TriggerInitial {
* key:该条变化数据的唯一标识(一般为主键值 可以根据该标识在原表查出具体数据再做同步更新、删除操作则只需指定标识)
* key:该条变化数据的唯一标识(一般为主键值 可以根据该标识在原表查出具体数据再做同步更新、删除操作则只需指定标识)
*/
*/
public
void
createChangeTable
()
{
public
void
createChangeTable
()
{
dataSourceService
.
switchDataSource
(
"zentao"
);
String
dropChangeTableSQL
=
"DROP TABLE IF EXISTS `zentao`.`kt_change`;\n"
;
String
dropChangeTableSQL
=
"DROP TABLE IF EXISTS `zentao`.`kt_change`;\n"
;
jdbcTemplate
.
execute
(
dropChangeTableSQL
);
jdbcTemplate
.
execute
(
dropChangeTableSQL
);
String
createChangeTableSQL
=
"CREATE TABLE `zentao`.`kt_change` (\n"
+
String
createChangeTableSQL
=
"CREATE TABLE `zentao`.`kt_change` (\n"
+
...
@@ -40,12 +42,14 @@ public class TriggerInitial {
...
@@ -40,12 +42,14 @@ public class TriggerInitial {
" `entity` VARCHAR(255) NULL,\n"
+
" `entity` VARCHAR(255) NULL,\n"
+
" `id` VARCHAR(255) NULL);\n"
;
" `id` VARCHAR(255) NULL);\n"
;
jdbcTemplate
.
execute
(
createChangeTableSQL
);
jdbcTemplate
.
execute
(
createChangeTableSQL
);
dataSourceService
.
switchMainDataSource
();
}
}
/**
/**
* 创建User表的触发器
* 创建User表的触发器
*/
*/
public
void
createUserTrigger
()
{
public
void
createUserTrigger
()
{
dataSourceService
.
switchDataSource
(
"zentao"
);
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_user_AFTER_INSERT`;\n"
;
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_user_AFTER_INSERT`;\n"
;
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_user_AFTER_INSERT` AFTER INSERT ON `zt_user` FOR EACH ROW\n"
+
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_user_AFTER_INSERT` AFTER INSERT ON `zt_user` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
...
@@ -70,12 +74,14 @@ public class TriggerInitial {
...
@@ -70,12 +74,14 @@ public class TriggerInitial {
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
dataSourceService
.
switchMainDataSource
();
}
}
/**
/**
* 创建Project表的触发器
* 创建Project表的触发器
*/
*/
public
void
createProjectTrigger
()
{
public
void
createProjectTrigger
()
{
dataSourceService
.
switchDataSource
(
"zentao"
);
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_project_AFTER_INSERT`;\n"
;
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_project_AFTER_INSERT`;\n"
;
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_project_AFTER_INSERT` AFTER INSERT ON `zt_project` FOR EACH ROW\n"
+
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_project_AFTER_INSERT` AFTER INSERT ON `zt_project` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
...
@@ -100,12 +106,14 @@ public class TriggerInitial {
...
@@ -100,12 +106,14 @@ public class TriggerInitial {
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
dataSourceService
.
switchMainDataSource
();
}
}
/**
/**
* 创建UserView表的触发器
* 创建UserView表的触发器
*/
*/
public
void
createUserViewTrigger
()
{
public
void
createUserViewTrigger
()
{
dataSourceService
.
switchDataSource
(
"zentao"
);
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_userview_AFTER_INSERT`;\n"
;
String
dropInsertTrigger
=
"DROP TRIGGER IF EXISTS `zentao`.`zt_userview_AFTER_INSERT`;\n"
;
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_userview_AFTER_INSERT` AFTER INSERT ON `zt_userview` FOR EACH ROW\n"
+
String
createInsertTrigger
=
"CREATE TRIGGER `zentao`.`zt_userview_AFTER_INSERT` AFTER INSERT ON `zt_userview` FOR EACH ROW\n"
+
"BEGIN\n"
+
"BEGIN\n"
+
...
@@ -127,6 +135,7 @@ public class TriggerInitial {
...
@@ -127,6 +135,7 @@ public class TriggerInitial {
"END;"
;
"END;"
;
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
dropDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
jdbcTemplate
.
execute
(
createDeleteTrigger
);
dataSourceService
.
switchMainDataSource
();
}
}
...
...
kt-user/src/main/java/org/matrix/remote/task/DataCollectorTask.java
浏览文件 @
9366cc51
package
org
.
matrix
.
remote
.
task
;
package
org
.
matrix
.
remote
.
task
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.matrix.actuators.datasource.DataSourceDTO
;
import
org.matrix.actuators.datasource.IDataSourceService
;
import
org.matrix.remote.service.DataAllCollector
;
import
org.matrix.remote.service.DataAllCollector
;
import
org.matrix.remote.service.DataTriggerCollector
;
import
org.matrix.remote.service.DataTriggerCollector
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -19,14 +21,35 @@ public class DataCollectorTask implements CommandLineRunner {
...
@@ -19,14 +21,35 @@ public class DataCollectorTask implements CommandLineRunner {
private
DataAllCollector
dataAllCollector
;
private
DataAllCollector
dataAllCollector
;
@Autowired
@Autowired
private
DataTriggerCollector
dataTriggerCollector
;
private
DataTriggerCollector
dataTriggerCollector
;
@Autowired
private
IDataSourceService
dataSourceService
;
/**
* 禅道数据同步组件是否运行的flag
* 如果未能读取到禅道数据源
* 则置为false
* 从而使禅道数据同步组件停止运行
*/
private
boolean
running
=
true
;
/**
* 在项目刚启动时进行一次全量同步
* 后续则轮询进行增量同步
*/
@Override
public
void
run
(
String
...
args
)
{
initDataSource
();
allCollect
();
}
/**
/**
* 全量同步禅道取的用户和项目数据
* 全量同步禅道取的用户和项目数据
*
每小时收集
一次
*
在项目启动时执行
一次
*/
*/
// @Scheduled(cron = "0 0 */1 * * ?")
private
void
allCollect
()
{
public
void
allCollect
()
{
if
(
running
)
{
dataAllCollector
.
execute
();
dataAllCollector
.
execute
();
}
}
}
/**
/**
...
@@ -34,17 +57,25 @@ public class DataCollectorTask implements CommandLineRunner {
...
@@ -34,17 +57,25 @@ public class DataCollectorTask implements CommandLineRunner {
* 每分钟收集一次
* 每分钟收集一次
*/
*/
@Scheduled
(
cron
=
"0 */1 * * * ?"
)
@Scheduled
(
cron
=
"0 */1 * * * ?"
)
public
void
triggerCollect
()
{
private
void
triggerCollect
()
{
dataTriggerCollector
.
execute
();
if
(
running
)
{
dataTriggerCollector
.
execute
();
}
}
}
/**
private
void
initDataSource
()
{
* 在项目刚启动时进行一次全量同步
log
.
info
(
"初始化禅道数据源..."
);
* 后续则轮询进行增量同步
try
{
*/
String
driverClassName
=
"com.mysql.cj.jdbc.Driver"
;
@Override
String
url
=
"jdbc:mysql://192.168.100.247:3306/zentao?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&&zeroDateTimeBehavior=convertToNull"
;
public
void
run
(
String
...
args
)
{
String
username
=
"root"
;
allCollect
();
String
password
=
"123456"
;
DataSourceDTO
zentao
=
new
DataSourceDTO
(
"zentao"
,
driverClassName
,
url
,
username
,
password
);
dataSourceService
.
add
(
zentao
);
}
catch
(
Exception
e
)
{
log
.
warn
(
"未能读取到禅道数据源..."
);
running
=
false
;
}
}
}
}
}
kt-user/src/main/resources/application.yml
浏览文件 @
9366cc51
...
@@ -8,13 +8,10 @@ spring:
...
@@ -8,13 +8,10 @@ spring:
datasource
:
datasource
:
master
:
#增加默认数据源
master
:
#增加默认数据源
driverClassName
:
com.mysql.cj.jdbc.Driver
driverClassName
:
com.mysql.cj.jdbc.Driver
url
:
jdbc:mysql://192.168.100.248:3306/key_stone?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
url
:
jdbc:mysql://192.168.100.247:3306/key_stone?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username
:
root
password
:
root
zentao
:
driverClassName
:
com.mysql.cj.jdbc.Driver
url
:
jdbc:mysql://192.168.100.247:3306/zentao?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&&zeroDateTimeBehavior=convertToNull
username
:
root
username
:
root
password
:
123456
password
:
123456
server
:
server
:
port
:
8180
port
:
8180
\ No newline at end of file
baseJsPath
:
syntaxCheck.js
\ No newline at end of file
kt-user/src/test/java/org/matrix/ktzentao/KtZentaoApplicationTests.java
浏览文件 @
9366cc51
...
@@ -2,11 +2,14 @@ package org.matrix.ktzentao;
...
@@ -2,11 +2,14 @@ package org.matrix.ktzentao;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.Test
;
import
org.matrix.ZentaoApplication
;
import
org.matrix.ZentaoApplication
;
import
org.matrix.local.entity.User
;
import
org.matrix.local.service.UserService
;
import
org.matrix.remote.service.DataAllCollector
;
import
org.matrix.remote.service.DataAllCollector
;
import
org.matrix.remote.service.TriggerInitial
;
import
org.matrix.remote.service.TriggerInitial
;
import
org.matrix.remote.task.DataCollectorTask
;
import
org.matrix.remote.task.DataCollectorTask
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.web.client.RestTemplate
;
@SpringBootTest
(
classes
=
ZentaoApplication
.
class
)
@SpringBootTest
(
classes
=
ZentaoApplication
.
class
)
class
KtZentaoApplicationTests
{
class
KtZentaoApplicationTests
{
...
@@ -17,13 +20,16 @@ class KtZentaoApplicationTests {
...
@@ -17,13 +20,16 @@ class KtZentaoApplicationTests {
DataCollectorTask
dataCollectorTask
;
DataCollectorTask
dataCollectorTask
;
@Autowired
@Autowired
TriggerInitial
triggerInitial
;
TriggerInitial
triggerInitial
;
@Autowired
UserService
userService
;
RestTemplate
restTemplate
=
new
RestTemplate
();
@Test
@Test
void
test
()
{
void
test
()
{
triggerInitial
.
createChangeTable
();
userService
.
save
(
new
User
(
null
,
"none"
,
"none"
,
"none"
));
triggerInitial
.
createUserTrigger
();
triggerInitial
.
createProjectTrigger
();
triggerInitial
.
createUserViewTrigger
();
}
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论