Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
dataease
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
njgzx
dataease
Commits
43eaf480
Unverified
提交
43eaf480
authored
5月 24, 2022
作者:
fit2cloud-chenyw
提交者:
GitHub
5月 24, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2299 from dataease/pr@dev@perf_de_log
perf: 优化审计日志
上级
e94cd85d
8152848c
隐藏空白字符变更
内嵌
并排
正在显示
29 个修改的文件
包含
583 行增加
和
48 行删除
+583
-48
DeLogAnnotationHandler.java
...ain/java/io/dataease/auth/aop/DeLogAnnotationHandler.java
+4
-5
CustomCellWriteUtil.java
...n/java/io/dataease/commons/utils/CustomCellWriteUtil.java
+70
-0
DeLogUtils.java
...d/src/main/java/io/dataease/commons/utils/DeLogUtils.java
+91
-0
DataSetGroupController.java
...o/dataease/controller/dataset/DataSetGroupController.java
+12
-3
DataSetTableController.java
...o/dataease/controller/dataset/DataSetTableController.java
+9
-0
DeleteGroupRequest.java
...taease/controller/dataset/request/DeleteGroupRequest.java
+15
-0
LogTypeItem.java
.../java/io/dataease/controller/sys/request/LogTypeItem.java
+14
-0
LogExcel.java
backend/src/main/java/io/dataease/dto/log/LogExcel.java
+20
-0
ExtSysLogMapper.xml
backend/src/main/java/io/dataease/ext/ExtSysLogMapper.xml
+26
-7
XAuthServer.java
...src/main/java/io/dataease/plugins/server/XAuthServer.java
+43
-0
DataSetGroupService.java
...java/io/dataease/service/dataset/DataSetGroupService.java
+4
-0
DataSetTableService.java
...java/io/dataease/service/dataset/DataSetTableService.java
+13
-0
PanelGroupService.java
...ain/java/io/dataease/service/panel/PanelGroupService.java
+29
-1
PanelLinkService.java
...main/java/io/dataease/service/panel/PanelLinkService.java
+17
-0
ShareService.java
...src/main/java/io/dataease/service/panel/ShareService.java
+65
-1
LogManager.java
...src/main/java/io/dataease/service/sys/log/LogManager.java
+57
-9
LogService.java
...src/main/java/io/dataease/service/sys/log/LogService.java
+37
-0
messages_en_US.properties
backend/src/main/resources/i18n/messages_en_US.properties
+8
-7
messages_zh_CN.properties
backend/src/main/resources/i18n/messages_zh_CN.properties
+1
-0
messages_zh_TW.properties
backend/src/main/resources/i18n/messages_zh_TW.properties
+1
-0
dataset.js
frontend/src/api/dataset/dataset.js
+4
-3
log.js
frontend/src/api/system/log.js
+2
-1
log.svg
frontend/src/icons/svg/log.svg
+2
-0
en.js
frontend/src/lang/en.js
+10
-1
tw.js
frontend/src/lang/tw.js
+10
-1
index.scss
frontend/src/styles/index.scss
+4
-0
Group.vue
frontend/src/views/dataset/group/Group.vue
+5
-4
index.vue
frontend/src/views/system/log/index.vue
+10
-4
index.vue
frontend/src/views/system/user/index.vue
+0
-1
没有找到文件。
backend/src/main/java/io/dataease/auth/aop/DeLogAnnotationHandler.java
浏览文件 @
43eaf480
...
...
@@ -4,6 +4,7 @@ package io.dataease.auth.aop;
import
io.dataease.auth.annotation.DeLog
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.commons.utils.AopUtils
;
import
io.dataease.commons.utils.DeLogUtils
;
import
io.dataease.controller.ResultHolder
;
import
io.dataease.dto.SysLogDTO
;
import
io.dataease.dto.log.FolderItem
;
...
...
@@ -84,7 +85,7 @@ public class DeLogAnnotationHandler {
items
.
add
(
folderItem
);
sysLogDTO
.
setPositions
(
items
);
}
else
{
List
<
FolderItem
>
parentsAndSelf
=
parents
(
bottomPositionValue
.
toString
(),
sourcetype
);
List
<
FolderItem
>
parentsAndSelf
=
logManager
.
parentsAndSelf
(
bottomPositionValue
.
toString
(),
sourcetype
);
sysLogDTO
.
setPositions
(
parentsAndSelf
);
}
...
...
@@ -98,7 +99,7 @@ public class DeLogAnnotationHandler {
SysLogConstants
.
SOURCE_TYPE
targetType
=
deLog
.
targetType
();
Object
bottomTargetValue
=
AopUtils
.
getParamValue
(
targetArg
,
targetKey
,
0
);
if
(
ObjectUtils
.
isNotEmpty
(
bottomTargetValue
))
{
List
<
FolderItem
>
parentsAndSelf
=
parents
(
bottomTargetValue
.
toString
(),
targetType
);
List
<
FolderItem
>
parentsAndSelf
=
logManager
.
parentsAndSelf
(
bottomTargetValue
.
toString
(),
targetType
);
sysLogDTO
.
setRemarks
(
parentsAndSelf
);
}
}
...
...
@@ -136,9 +137,7 @@ public class DeLogAnnotationHandler {
return
deLog
;
}
public
List
<
FolderItem
>
parents
(
String
value
,
SysLogConstants
.
SOURCE_TYPE
type
)
{
return
logManager
.
parentsAndSelf
(
value
,
type
);
}
}
backend/src/main/java/io/dataease/commons/utils/CustomCellWriteUtil.java
0 → 100644
浏览文件 @
43eaf480
package
io
.
dataease
.
commons
.
utils
;
import
com.alibaba.excel.enums.CellDataTypeEnum
;
import
com.alibaba.excel.metadata.CellData
;
import
com.alibaba.excel.metadata.Head
;
import
com.alibaba.excel.util.CollectionUtils
;
import
com.alibaba.excel.write.metadata.holder.WriteSheetHolder
;
import
com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy
;
import
org.apache.poi.ss.usermodel.Cell
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* excel自适应列宽
*/
public
class
CustomCellWriteUtil
extends
AbstractColumnWidthStyleStrategy
{
private
static
final
int
MAX_COLUMN_WIDTH
=
255
;
private
Map
<
Integer
,
Map
<
Integer
,
Integer
>>
CACHE
=
new
HashMap
(
8
);
public
CustomCellWriteUtil
()
{
}
protected
void
setColumnWidth
(
WriteSheetHolder
writeSheetHolder
,
List
<
CellData
>
cellDataList
,
Cell
cell
,
Head
head
,
Integer
relativeRowIndex
,
Boolean
isHead
)
{
boolean
needSetWidth
=
isHead
||
!
CollectionUtils
.
isEmpty
(
cellDataList
);
if
(
needSetWidth
)
{
Map
<
Integer
,
Integer
>
maxColumnWidthMap
=
(
Map
)
CACHE
.
get
(
writeSheetHolder
.
getSheetNo
());
if
(
maxColumnWidthMap
==
null
)
{
maxColumnWidthMap
=
new
HashMap
(
16
);
CACHE
.
put
(
writeSheetHolder
.
getSheetNo
(),
maxColumnWidthMap
);
}
Integer
columnWidth
=
this
.
dataLength
(
cellDataList
,
cell
,
isHead
);
if
(
columnWidth
>=
0
)
{
if
(
columnWidth
>
255
)
{
columnWidth
=
255
;
}
Integer
maxColumnWidth
=
(
Integer
)
((
Map
)
maxColumnWidthMap
).
get
(
cell
.
getColumnIndex
());
if
(
maxColumnWidth
==
null
||
columnWidth
>
maxColumnWidth
)
{
((
Map
)
maxColumnWidthMap
).
put
(
cell
.
getColumnIndex
(),
columnWidth
);
writeSheetHolder
.
getSheet
().
setColumnWidth
(
cell
.
getColumnIndex
(),
7250
);
}
}
}
}
private
Integer
dataLength
(
List
<
CellData
>
cellDataList
,
Cell
cell
,
Boolean
isHead
)
{
if
(
isHead
)
{
return
cell
.
getStringCellValue
().
getBytes
().
length
;
}
else
{
CellData
cellData
=
(
CellData
)
cellDataList
.
get
(
0
);
CellDataTypeEnum
type
=
cellData
.
getType
();
if
(
type
==
null
)
{
return
-
1
;
}
else
{
switch
(
type
)
{
case
STRING:
return
cellData
.
getStringValue
().
getBytes
().
length
;
case
BOOLEAN:
return
cellData
.
getBooleanValue
().
toString
().
getBytes
().
length
;
case
NUMBER:
return
cellData
.
getNumberValue
().
toString
().
getBytes
().
length
;
default
:
return
-
1
;
}
}
}
}
}
backend/src/main/java/io/dataease/commons/utils/DeLogUtils.java
0 → 100644
浏览文件 @
43eaf480
package
io
.
dataease
.
commons
.
utils
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.dto.SysLogDTO
;
import
io.dataease.dto.log.FolderItem
;
import
io.dataease.service.sys.log.LogManager
;
import
io.dataease.service.sys.log.LogService
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Optional
;
import
static
io
.
dataease
.
commons
.
constants
.
SysLogConstants
.
OPERATE_TYPE
;
import
static
io
.
dataease
.
commons
.
constants
.
SysLogConstants
.
SOURCE_TYPE
;
@Component
public
class
DeLogUtils
{
private
static
LogManager
logManager
;
private
static
LogService
logService
;
@Autowired
public
void
setLogManager
(
LogManager
logManager
)
{
DeLogUtils
.
logManager
=
logManager
;
}
@Autowired
public
void
setLogService
(
LogService
logService
)
{
DeLogUtils
.
logService
=
logService
;
}
public
static
SysLogDTO
buildLog
(
OPERATE_TYPE
operatetype
,
SOURCE_TYPE
sourcetype
,
Object
sourceIdValue
,
Object
targetId
,
SOURCE_TYPE
target_type
)
{
SysLogDTO
sysLogDTO
=
buildLog
(
operatetype
,
sourcetype
,
sourceIdValue
,
null
,
targetId
,
target_type
);
if
(
sourcetype
==
SysLogConstants
.
SOURCE_TYPE
.
DATASOURCE
)
{
FolderItem
folderItem
=
logManager
.
dsTypeInfoById
(
sourceIdValue
.
toString
());
List
<
FolderItem
>
items
=
new
ArrayList
<>();
items
.
add
(
folderItem
);
sysLogDTO
.
setPositions
(
items
);
}
else
{
List
<
FolderItem
>
parentsAndSelf
=
logManager
.
justParents
(
sourceIdValue
.
toString
(),
sourcetype
);
sysLogDTO
.
setPositions
(
parentsAndSelf
);
}
return
sysLogDTO
;
}
public
static
SysLogDTO
buildLog
(
OPERATE_TYPE
operatetype
,
SOURCE_TYPE
sourcetype
,
Object
sourceIdValue
,
Object
positionId
,
Object
targetId
,
SOURCE_TYPE
target_type
)
{
SysLogDTO
sysLogDTO
=
new
SysLogDTO
();
sysLogDTO
.
setOperateType
(
operatetype
.
getValue
());
sysLogDTO
.
setSourceType
(
sourcetype
.
getValue
());
sysLogDTO
.
setSourceId
(
sourceIdValue
.
toString
());
FolderItem
sourceInfo
=
logManager
.
nameWithId
(
sourceIdValue
.
toString
(),
sourcetype
.
getValue
());
if
(
ObjectUtils
.
isEmpty
(
sourceInfo
))
{
return
null
;
}
sysLogDTO
.
setSourceName
(
sourceInfo
.
getName
());
if
(
ObjectUtils
.
isNotEmpty
(
positionId
))
{
if
(
sourcetype
==
SysLogConstants
.
SOURCE_TYPE
.
DATASOURCE
)
{
FolderItem
folderItem
=
logManager
.
dsTypeInfo
(
positionId
.
toString
());
List
<
FolderItem
>
items
=
new
ArrayList
<>();
items
.
add
(
folderItem
);
sysLogDTO
.
setPositions
(
items
);
}
else
{
List
<
FolderItem
>
parentsAndSelf
=
logManager
.
parentsAndSelf
(
positionId
.
toString
(),
sourcetype
);
sysLogDTO
.
setPositions
(
parentsAndSelf
);
}
}
if
(
ObjectUtils
.
isNotEmpty
(
targetId
))
{
List
<
FolderItem
>
parentsAndSelf
=
logManager
.
parentsAndSelf
(
targetId
.
toString
(),
target_type
);
sysLogDTO
.
setRemarks
(
parentsAndSelf
);
}
return
sysLogDTO
;
}
public
static
void
save
(
SysLogDTO
sysLogDTO
)
{
Optional
.
ofNullable
(
sysLogDTO
).
ifPresent
(
logService:
:
saveLog
);
}
public
static
void
save
(
OPERATE_TYPE
operatetype
,
SOURCE_TYPE
sourcetype
,
Object
sourceIdValue
,
Object
positionId
,
Object
targetId
,
SOURCE_TYPE
target_type
)
{
SysLogDTO
sysLogDTO
=
buildLog
(
operatetype
,
sourcetype
,
sourceIdValue
,
positionId
,
targetId
,
target_type
);
Optional
.
ofNullable
(
sysLogDTO
).
ifPresent
(
logService:
:
saveLog
);
}
}
backend/src/main/java/io/dataease/controller/dataset/DataSetGroupController.java
浏览文件 @
43eaf480
package
io
.
dataease
.
controller
.
dataset
;
import
com.github.xiaoymin.knife4j.annotations.ApiSupport
;
import
io.dataease.auth.annotation.DeLog
;
import
io.dataease.auth.annotation.DePermission
;
import
io.dataease.auth.annotation.DePermissions
;
import
io.dataease.commons.constants.DePermissionType
;
import
io.dataease.commons.constants.ResourceAuthLevel
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.controller.dataset.request.DeleteGroupRequest
;
import
io.dataease.controller.request.dataset.DataSetGroupRequest
;
import
io.dataease.dto.dataset.DataSetGroupDTO
;
import
io.dataease.plugins.common.base.domain.DatasetGroup
;
...
...
@@ -57,9 +60,15 @@ public class DataSetGroupController {
@DePermission
(
type
=
DePermissionType
.
DATASET
,
level
=
ResourceAuthLevel
.
DATASET_LEVEL_MANAGE
)
@ApiOperation
(
"删除"
)
@PostMapping
(
"/delete/{id}"
)
public
void
tree
(
@PathVariable
String
id
)
throws
Exception
{
dataSetGroupService
.
delete
(
id
);
@PostMapping
(
"/delete"
)
@DeLog
(
operatetype
=
SysLogConstants
.
OPERATE_TYPE
.
DELETE
,
sourcetype
=
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
positionIndex
=
0
,
positionKey
=
"pid"
,
value
=
"id"
)
public
void
tree
(
@RequestBody
DeleteGroupRequest
request
)
throws
Exception
{
dataSetGroupService
.
delete
(
request
.
getId
());
}
@ApiIgnore
...
...
backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java
浏览文件 @
43eaf480
package
io
.
dataease
.
controller
.
dataset
;
import
com.github.xiaoymin.knife4j.annotations.ApiSupport
;
import
io.dataease.auth.annotation.DeLog
;
import
io.dataease.auth.annotation.DePermission
;
import
io.dataease.auth.annotation.DePermissions
;
import
io.dataease.commons.constants.DePermissionType
;
import
io.dataease.commons.constants.ResourceAuthLevel
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.controller.request.dataset.DataSetTableRequest
;
import
io.dataease.controller.response.DataSetDetail
;
import
io.dataease.dto.dataset.DataSetTableDTO
;
...
...
@@ -65,6 +67,13 @@ public class DataSetTableController {
},
logical
=
Logical
.
AND
)
@ApiOperation
(
"修改"
)
@PostMapping
(
"alter"
)
@DeLog
(
operatetype
=
SysLogConstants
.
OPERATE_TYPE
.
MODIFY
,
sourcetype
=
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
value
=
"id"
,
positionIndex
=
0
,
positionKey
=
"sceneId"
)
public
void
alter
(
@RequestBody
DataSetTableRequest
request
)
throws
Exception
{
dataSetTableService
.
alter
(
request
);
}
...
...
backend/src/main/java/io/dataease/controller/dataset/request/DeleteGroupRequest.java
0 → 100644
浏览文件 @
43eaf480
package
io
.
dataease
.
controller
.
dataset
.
request
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
DeleteGroupRequest
implements
Serializable
{
@ApiModelProperty
(
value
=
"ID"
,
required
=
true
)
private
String
id
;
@ApiModelProperty
(
value
=
"PID"
,
required
=
true
)
private
String
pid
;
}
backend/src/main/java/io/dataease/controller/sys/request/LogTypeItem.java
0 → 100644
浏览文件 @
43eaf480
package
io
.
dataease
.
controller
.
sys
.
request
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.List
;
@Data
public
class
LogTypeItem
implements
Serializable
{
private
List
<
String
>
parentIds
;
private
String
typeValue
;
}
backend/src/main/java/io/dataease/dto/log/LogExcel.java
0 → 100644
浏览文件 @
43eaf480
package
io
.
dataease
.
dto
.
log
;
import
com.alibaba.excel.annotation.ExcelProperty
;
import
lombok.Data
;
@Data
public
class
LogExcel
{
@ExcelProperty
(
value
=
{
"optype"
},
index
=
0
)
private
String
optype
;
@ExcelProperty
(
value
=
{
"detail"
},
index
=
1
)
private
String
detail
;
@ExcelProperty
(
value
=
{
"user"
},
index
=
2
)
private
String
user
;
@ExcelProperty
(
value
=
{
"time"
},
index
=
3
)
private
String
time
;
}
backend/src/main/java/io/dataease/ext/ExtSysLogMapper.xml
浏览文件 @
43eaf480
...
...
@@ -37,13 +37,28 @@
<if
test=
"type == 2"
>
id, name
from dataset_group
<where>
id in
<foreach
collection=
"ids"
item=
"id"
index=
"index"
open=
"("
separator=
","
close=
")"
>
#{id}
</foreach>
</where>
from (
select id, name from dataset_group
<where>
id in
<foreach
collection=
"ids"
item=
"id"
index=
"index"
open=
"("
separator=
","
close=
")"
>
#{id}
</foreach>
</where>
union all
select id, name from dataset_table
<where>
id in
<foreach
collection=
"ids"
item=
"id"
index=
"index"
open=
"("
separator=
","
close=
")"
>
#{id}
</foreach>
</where>
) dataset
</if>
<if
test=
"type == 3"
>
...
...
@@ -54,6 +69,10 @@
<foreach
collection=
"ids"
item=
"id"
index=
"index"
open=
"("
separator=
","
close=
")"
>
#{id}
</foreach>
ORDER BY FIELD(id,
<foreach
collection=
"ids"
item=
"id"
index=
"index"
open=
""
separator=
","
close=
")"
>
#{id}
</foreach>
</where>
</if>
...
...
backend/src/main/java/io/dataease/plugins/server/XAuthServer.java
浏览文件 @
43eaf480
...
...
@@ -2,8 +2,11 @@ package io.dataease.plugins.server;
import
io.dataease.auth.api.dto.CurrentUserDto
;
import
io.dataease.commons.constants.AuthConstants
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.commons.utils.AuthUtils
;
import
io.dataease.commons.utils.DeLogUtils
;
import
io.dataease.controller.handler.annotation.I18n
;
import
io.dataease.dto.SysLogDTO
;
import
io.dataease.listener.util.CacheUtils
;
import
io.dataease.plugins.config.SpringContextUtil
;
import
io.dataease.plugins.xpack.auth.dto.request.XpackBaseTreeRequest
;
...
...
@@ -86,11 +89,51 @@ public class XAuthServer {
}
else
{
CacheUtils
.
remove
(
authCacheKey
,
request
.
getAuthTargetType
()
+
request
.
getAuthTarget
());
}
}
SysLogConstants
.
OPERATE_TYPE
operateType
=
SysLogConstants
.
OPERATE_TYPE
.
AUTHORIZE
;
if
(
1
==
request
.
getAuthDetail
().
getPrivilegeValue
())
{
operateType
=
SysLogConstants
.
OPERATE_TYPE
.
UNAUTHORIZE
;
}
SysLogConstants
.
SOURCE_TYPE
sourceType
=
sourceType
(
request
.
getAuthSourceType
());
SysLogConstants
.
SOURCE_TYPE
tarType
=
tarType
(
request
.
getAuthTargetType
());
SysLogDTO
sysLogDTO
=
DeLogUtils
.
buildLog
(
operateType
,
sourceType
,
request
.
getAuthSource
(),
request
.
getAuthTarget
(),
tarType
);
DeLogUtils
.
save
(
sysLogDTO
);
});
}
private
SysLogConstants
.
SOURCE_TYPE
sourceType
(
String
sourceType
)
{
if
(
StringUtils
.
equals
(
"link"
,
sourceType
))
{
return
SysLogConstants
.
SOURCE_TYPE
.
DATASOURCE
;
}
if
(
StringUtils
.
equals
(
"menu"
,
sourceType
))
{
return
SysLogConstants
.
SOURCE_TYPE
.
DATASOURCE
;
}
if
(
StringUtils
.
equals
(
"dataset"
,
sourceType
))
{
return
SysLogConstants
.
SOURCE_TYPE
.
DATASET
;
}
if
(
StringUtils
.
equals
(
"panel"
,
sourceType
))
{
return
SysLogConstants
.
SOURCE_TYPE
.
PANEL
;
}
return
null
;
}
private
SysLogConstants
.
SOURCE_TYPE
tarType
(
String
targetType
)
{
if
(
StringUtils
.
equals
(
"user"
,
targetType
))
{
return
SysLogConstants
.
SOURCE_TYPE
.
USER
;
}
if
(
StringUtils
.
equals
(
"role"
,
targetType
))
{
return
SysLogConstants
.
SOURCE_TYPE
.
ROLE
;
}
if
(
StringUtils
.
equals
(
"dept"
,
targetType
))
{
return
SysLogConstants
.
SOURCE_TYPE
.
DEPT
;
}
return
null
;
}
private
String
getAuthCacheKey
(
XpackSysAuthRequest
request
)
{
if
(
CollectionUtils
.
isEmpty
(
cacheTypes
))
{
cacheTypes
.
add
(
"link"
);
...
...
backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java
浏览文件 @
43eaf480
package
io
.
dataease
.
service
.
dataset
;
import
io.dataease.auth.annotation.DeCleaner
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.commons.utils.DeLogUtils
;
import
io.dataease.ext.ExtDataSetGroupMapper
;
import
io.dataease.commons.constants.AuthConstants
;
import
io.dataease.commons.constants.DePermissionType
;
...
...
@@ -55,12 +57,14 @@ public class DataSetGroupService {
datasetGroup
.
setCreateBy
(
AuthUtils
.
getUser
().
getUsername
());
datasetGroup
.
setCreateTime
(
System
.
currentTimeMillis
());
datasetGroupMapper
.
insert
(
datasetGroup
);
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
CREATE
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
datasetGroup
.
getId
(),
datasetGroup
.
getPid
(),
null
,
null
);
String
userName
=
AuthUtils
.
getUser
().
getUsername
();
// 清理权限缓存
CacheUtils
.
removeAll
(
AuthConstants
.
USER_PERMISSION_CACHE_NAME
);
sysAuthService
.
copyAuth
(
datasetGroup
.
getId
(),
SysAuthConstants
.
AUTH_SOURCE_TYPE_DATASET
);
}
else
{
datasetGroupMapper
.
updateByPrimaryKeySelective
(
datasetGroup
);
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFY
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
datasetGroup
.
getId
(),
datasetGroup
.
getPid
(),
null
,
null
);
}
DataSetGroupDTO
dataSetGroupDTO
=
new
DataSetGroupDTO
();
BeanUtils
.
copyBean
(
dataSetGroupDTO
,
datasetGroup
);
...
...
backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java
浏览文件 @
43eaf480
...
...
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import
com.google.gson.Gson
;
import
io.dataease.auth.annotation.DeCleaner
;
import
io.dataease.auth.api.dto.CurrentUserDto
;
import
io.dataease.dto.SysLogDTO
;
import
io.dataease.ext.ExtDataSetGroupMapper
;
import
io.dataease.ext.ExtDataSetTableMapper
;
import
io.dataease.ext.UtilMapper
;
...
...
@@ -178,6 +179,7 @@ public class DataSetTableService {
sysAuthService
.
copyAuth
(
sheetTable
.
getId
(),
SysAuthConstants
.
AUTH_SOURCE_TYPE_DATASET
);
saveExcelTableField
(
sheetTable
.
getId
(),
excelSheetDataList
.
get
(
0
).
getFields
(),
true
);
datasetIdList
.
add
(
sheetTable
.
getId
());
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
CREATE
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
datasetTable
.
getId
(),
datasetTable
.
getSceneId
(),
null
,
null
);
}
datasetIdList
.
forEach
(
datasetId
->
{
commonThreadPool
.
addTask
(()
->
extractDataService
.
extractExcelData
(
datasetId
,
"all_scope"
,
"初始导入"
,
...
...
@@ -208,12 +210,14 @@ public class DataSetTableService {
sysAuthService
.
copyAuth
(
sheetTable
.
getId
(),
SysAuthConstants
.
AUTH_SOURCE_TYPE_DATASET
);
saveExcelTableField
(
sheetTable
.
getId
(),
sheet
.
getFields
(),
true
);
datasetIdList
.
add
(
sheetTable
.
getId
());
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFY
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
datasetTable
.
getId
(),
datasetTable
.
getSceneId
(),
null
,
null
);
}
datasetIdList
.
forEach
(
datasetId
->
{
commonThreadPool
.
addTask
(()
->
extractDataService
.
extractExcelData
(
datasetId
,
"all_scope"
,
"初始导入"
,
null
,
datasetIdList
));
});
}
return
;
}
...
...
@@ -253,6 +257,7 @@ public class DataSetTableService {
commonThreadPool
.
addTask
(()
->
extractDataService
.
extractExcelData
(
datasetTable
.
getId
(),
"add_scope"
,
"追加"
,
null
,
Arrays
.
asList
(
datasetTable
.
getId
())));
}
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFY
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
datasetTable
.
getId
(),
datasetTable
.
getSceneId
(),
null
,
null
);
}
@DeCleaner
(
value
=
DePermissionType
.
DATASET
,
key
=
"sceneId"
)
...
...
@@ -268,6 +273,8 @@ public class DataSetTableService {
datasetTable
.
setCreateBy
(
AuthUtils
.
getUser
().
getUsername
());
datasetTable
.
setCreateTime
(
System
.
currentTimeMillis
());
int
insert
=
datasetTableMapper
.
insert
(
datasetTable
);
// 清理权限缓存
CacheUtils
.
removeAll
(
AuthConstants
.
USER_PERMISSION_CACHE_NAME
);
sysAuthService
.
copyAuth
(
datasetTable
.
getId
(),
SysAuthConstants
.
AUTH_SOURCE_TYPE_DATASET
);
...
...
@@ -276,6 +283,7 @@ public class DataSetTableService {
if
(
insert
==
1
)
{
saveTableField
(
datasetTable
);
extractData
(
datasetTable
);
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
CREATE
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
datasetTable
.
getId
(),
datasetTable
.
getSceneId
(),
null
,
null
);
}
}
else
{
int
update
=
datasetTableMapper
.
updateByPrimaryKeySelective
(
datasetTable
);
...
...
@@ -287,6 +295,7 @@ public class DataSetTableService {
||
StringUtils
.
equalsIgnoreCase
(
datasetTable
.
getType
(),
"union"
))
{
saveTableField
(
datasetTable
);
}
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFY
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
datasetTable
.
getId
(),
datasetTable
.
getSceneId
(),
null
,
null
);
}
}
}
...
...
@@ -300,6 +309,7 @@ public class DataSetTableService {
public
void
delete
(
String
id
)
throws
Exception
{
DatasetTable
table
=
datasetTableMapper
.
selectByPrimaryKey
(
id
);
SysLogDTO
sysLogDTO
=
DeLogUtils
.
buildLog
(
SysLogConstants
.
OPERATE_TYPE
.
DELETE
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
table
.
getId
(),
table
.
getSceneId
(),
null
,
null
);
datasetTableMapper
.
deleteByPrimaryKey
(
id
);
dataSetTableFieldsService
.
deleteByTableId
(
id
);
// 删除同步任务
...
...
@@ -311,6 +321,7 @@ public class DataSetTableService {
if
(
table
.
getMode
()
==
1
)
{
deleteDorisTable
(
id
,
table
);
}
DeLogUtils
.
save
(
sysLogDTO
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -1771,6 +1782,8 @@ public class DataSetTableService {
}
else
{
datasetTableIncrementalConfigMapper
.
updateByPrimaryKey
(
datasetTableIncrementalConfig
);
}
DatasetTable
datasetTable
=
get
(
datasetTableIncrementalConfig
.
getTableId
());
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFY
,
SysLogConstants
.
SOURCE_TYPE
.
DATASET
,
datasetTable
.
getId
(),
datasetTable
.
getSceneId
(),
null
,
null
);
checkColumes
(
datasetTableIncrementalConfig
);
}
...
...
backend/src/main/java/io/dataease/service/panel/PanelGroupService.java
浏览文件 @
43eaf480
...
...
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import
io.dataease.auth.annotation.DeCleaner
;
import
io.dataease.commons.constants.*
;
import
io.dataease.commons.utils.AuthUtils
;
import
io.dataease.commons.utils.DeLogUtils
;
import
io.dataease.commons.utils.LogUtil
;
import
io.dataease.commons.utils.TreeUtils
;
import
io.dataease.controller.request.authModel.VAuthModelRequest
;
...
...
@@ -12,6 +13,7 @@ import io.dataease.controller.request.panel.PanelGroupBaseInfoRequest;
import
io.dataease.controller.request.panel.PanelGroupRequest
;
import
io.dataease.controller.request.panel.PanelViewDetailsRequest
;
import
io.dataease.dto.PanelGroupExtendDataDTO
;
import
io.dataease.dto.SysLogDTO
;
import
io.dataease.dto.authModel.VAuthModelDTO
;
import
io.dataease.dto.chart.ChartViewDTO
;
import
io.dataease.dto.dataset.DataSetTableDTO
;
...
...
@@ -28,6 +30,7 @@ import io.dataease.service.dataset.DataSetTableService;
import
io.dataease.service.staticResource.StaticResourceService
;
import
io.dataease.service.sys.SysAuthService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.poi.hssf.usermodel.*
;
import
org.apache.poi.ss.usermodel.*
;
...
...
@@ -55,6 +58,8 @@ public class PanelGroupService {
private
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
this
.
getClass
());
private
final
SysLogConstants
.
SOURCE_TYPE
sourceType
=
SysLogConstants
.
SOURCE_TYPE
.
PANEL
;
private
final
static
String
DATA_URL_TITLE
=
"data:image/jpeg;base64,"
;
@Resource
private
PanelGroupMapper
panelGroupMapper
;
...
...
@@ -128,6 +133,7 @@ public class PanelGroupService {
// 清理权限缓存
clearPermissionCache
();
sysAuthService
.
copyAuth
(
panelId
,
SysAuthConstants
.
AUTH_SOURCE_TYPE_PANEL
);
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
CREATE
,
sourceType
,
panelId
,
request
.
getPid
(),
null
,
null
);
}
else
if
(
"toDefaultPanel"
.
equals
(
request
.
getOptType
()))
{
// 转存为默认仪表板
panelId
=
UUID
.
randomUUID
().
toString
();
PanelGroupWithBLOBs
newDefaultPanel
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getId
());
...
...
@@ -144,11 +150,19 @@ public class PanelGroupService {
// 清理权限缓存
clearPermissionCache
();
sysAuthService
.
copyAuth
(
panelId
,
SysAuthConstants
.
AUTH_SOURCE_TYPE_PANEL
);
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
CREATE
,
sourceType
,
panelId
,
PanelConstants
.
PANEL_GATHER_DEFAULT_PANEL
,
null
,
null
);
}
else
if
(
"copy"
.
equals
(
request
.
getOptType
()))
{
panelId
=
this
.
panelGroupCopy
(
request
,
null
,
true
);
// 清理权限缓存
clearPermissionCache
();
sysAuthService
.
copyAuth
(
panelId
,
SysAuthConstants
.
AUTH_SOURCE_TYPE_PANEL
);
if
(
StringUtils
.
isBlank
(
request
.
getPid
()))
{
PanelGroupWithBLOBs
panel
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getId
());
if
(
ObjectUtils
.
isNotEmpty
(
panel
))
{
request
.
setPid
(
panel
.
getPid
());
}
}
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
CREATE
,
sourceType
,
panelId
,
request
.
getPid
(),
null
,
null
);
}
else
if
(
"move"
.
equals
(
request
.
getOptType
()))
{
PanelGroupWithBLOBs
panelInfo
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getId
());
if
(
panelInfo
.
getPid
().
equalsIgnoreCase
(
request
.
getPid
()))
{
...
...
@@ -163,6 +177,7 @@ public class PanelGroupService {
record
.
setId
(
request
.
getId
());
record
.
setPid
(
request
.
getPid
());
panelGroupMapper
.
updateByPrimaryKeySelective
(
record
);
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFY
,
sourceType
,
request
.
getId
(),
panelInfo
.
getPid
(),
request
.
getPid
(),
sourceType
);
}
else
{
// 更新
...
...
@@ -170,6 +185,14 @@ public class PanelGroupService {
checkPanelName
(
request
.
getName
(),
request
.
getPid
(),
PanelConstants
.
OPT_TYPE_UPDATE
,
request
.
getId
(),
request
.
getNodeType
());
}
panelGroupMapper
.
updateByPrimaryKeySelective
(
request
);
if
(
StringUtils
.
isBlank
(
request
.
getPid
()))
{
PanelGroupWithBLOBs
panel
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getId
());
if
(
ObjectUtils
.
isNotEmpty
(
panel
))
{
request
.
setPid
(
panel
.
getPid
());
}
}
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFY
,
sourceType
,
request
.
getId
(),
request
.
getPid
(),
null
,
sourceType
);
}
//带有权限的返回
...
...
@@ -202,7 +225,8 @@ public class PanelGroupService {
public
void
deleteCircle
(
String
id
)
{
Assert
.
notNull
(
id
,
"id cannot be null"
);
sysAuthService
.
checkTreeNoManageCount
(
"panel"
,
id
);
PanelGroupWithBLOBs
panel
=
panelGroupMapper
.
selectByPrimaryKey
(
id
);
SysLogDTO
sysLogDTO
=
DeLogUtils
.
buildLog
(
SysLogConstants
.
OPERATE_TYPE
.
DELETE
,
sourceType
,
panel
.
getId
(),
panel
.
getPid
(),
null
,
null
);
//清理view 和 view cache
extPanelGroupMapper
.
deleteCircleView
(
id
);
extPanelGroupMapper
.
deleteCircleViewCache
(
id
);
...
...
@@ -218,6 +242,10 @@ public class PanelGroupService {
extPanelLinkJumpMapper
.
deleteJumpTargetViewInfoWithPanel
(
id
);
extPanelLinkJumpMapper
.
deleteJumpInfoWithPanel
(
id
);
extPanelLinkJumpMapper
.
deleteJumpWithPanel
(
id
);
DeLogUtils
.
save
(
sysLogDTO
);
}
...
...
backend/src/main/java/io/dataease/service/panel/PanelLinkService.java
浏览文件 @
43eaf480
...
...
@@ -3,8 +3,10 @@ package io.dataease.service.panel;
import
io.dataease.auth.config.RsaProperties
;
import
io.dataease.auth.util.JWTUtils
;
import
io.dataease.auth.util.RsaUtil
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.commons.utils.AuthUtils
;
import
io.dataease.commons.utils.CodingUtil
;
import
io.dataease.commons.utils.DeLogUtils
;
import
io.dataease.commons.utils.ServletUtils
;
import
io.dataease.controller.request.panel.link.EnablePwdRequest
;
import
io.dataease.controller.request.panel.link.LinkRequest
;
...
...
@@ -59,6 +61,13 @@ public class PanelLinkService {
PanelLinkMapping
mapping
=
new
PanelLinkMapping
();
mapping
.
setUuid
(
CodingUtil
.
shortUuid
());
panelLinkMappingMapper
.
updateByExampleSelective
(
mapping
,
example
);
PanelGroupWithBLOBs
panel
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getResourceId
());
SysLogConstants
.
OPERATE_TYPE
operateType
=
SysLogConstants
.
OPERATE_TYPE
.
CREATELINK
;
if
(!
request
.
isValid
())
{
operateType
=
SysLogConstants
.
OPERATE_TYPE
.
DELETELINK
;
}
DeLogUtils
.
save
(
operateType
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panel
.
getId
(),
panel
.
getPid
(),
null
,
null
)
;
}
private
PanelLinkExample
example
(
String
panelLinkId
,
Long
userId
)
{
...
...
@@ -72,6 +81,8 @@ public class PanelLinkService {
po
.
setResourceId
(
request
.
getResourceId
());
po
.
setEnablePwd
(
request
.
isEnablePwd
());
mapper
.
updateByExampleSelective
(
po
,
example
(
request
.
getResourceId
(),
AuthUtils
.
getUser
().
getUserId
()));
PanelGroupWithBLOBs
panel
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getResourceId
());
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFYLINK
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panel
.
getId
(),
panel
.
getPid
(),
null
,
null
)
;
}
public
void
password
(
PasswordRequest
request
)
{
...
...
@@ -79,11 +90,17 @@ public class PanelLinkService {
po
.
setResourceId
(
request
.
getResourceId
());
po
.
setPwd
(
request
.
getPassword
());
mapper
.
updateByExampleSelective
(
po
,
example
(
request
.
getResourceId
(),
AuthUtils
.
getUser
().
getUserId
()));
PanelGroupWithBLOBs
panel
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getResourceId
());
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFYLINK
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panel
.
getId
(),
panel
.
getPid
(),
null
,
null
)
;
}
public
void
overTime
(
OverTimeRequest
request
)
{
request
.
setUserId
(
AuthUtils
.
getUser
().
getUserId
());
extPanelLinkMapper
.
updateOverTime
(
request
);
PanelGroupWithBLOBs
panel
=
panelGroupMapper
.
selectByPrimaryKey
(
request
.
getResourceId
());
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
MODIFYLINK
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panel
.
getId
(),
panel
.
getPid
(),
null
,
null
)
;
}
private
PanelLink
findOne
(
String
resourceId
)
{
...
...
backend/src/main/java/io/dataease/service/panel/ShareService.java
浏览文件 @
43eaf480
...
...
@@ -3,6 +3,8 @@ package io.dataease.service.panel;
import
com.google.gson.Gson
;
import
io.dataease.auth.api.dto.CurrentRoleDto
;
import
io.dataease.auth.api.dto.CurrentUserDto
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.commons.utils.DeLogUtils
;
import
io.dataease.ext.ExtPanelShareMapper
;
import
io.dataease.commons.model.AuthURD
;
import
io.dataease.commons.utils.AuthUtils
;
...
...
@@ -126,11 +128,61 @@ public class ShareService {
extPanelShareMapper
.
batchInsert
(
addShares
,
AuthUtils
.
getUser
().
getUsername
());
}
PanelGroup
panelGroup
=
panelGroupMapper
.
selectByPrimaryKey
(
panelGroupId
);
if
(
CollectionUtils
.
isNotEmpty
(
addAuthURD
.
getUserIds
()))
{
addAuthURD
.
getUserIds
().
forEach
(
id
->
{
if
(
CollectionUtils
.
isEmpty
(
sharedAuthURD
.
getUserIds
())
||
!
sharedAuthURD
.
getUserIds
().
contains
(
id
))
{
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
SHARE
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panelGroupId
,
panelGroup
.
getPid
(),
id
,
SysLogConstants
.
SOURCE_TYPE
.
USER
);
}
});
}
if
(
CollectionUtils
.
isNotEmpty
(
addAuthURD
.
getRoleIds
()))
{
addAuthURD
.
getRoleIds
().
forEach
(
id
->
{
if
(
CollectionUtils
.
isEmpty
(
sharedAuthURD
.
getRoleIds
())
||
!
sharedAuthURD
.
getRoleIds
().
contains
(
id
))
{
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
SHARE
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panelGroupId
,
panelGroup
.
getPid
(),
id
,
SysLogConstants
.
SOURCE_TYPE
.
ROLE
);
}
});
}
if
(
CollectionUtils
.
isNotEmpty
(
addAuthURD
.
getDeptIds
()))
{
addAuthURD
.
getDeptIds
().
forEach
(
id
->
{
if
(
CollectionUtils
.
isEmpty
(
sharedAuthURD
.
getDeptIds
())
||
!
sharedAuthURD
.
getDeptIds
().
contains
(
id
))
{
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
SHARE
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panelGroupId
,
panelGroup
.
getPid
(),
id
,
SysLogConstants
.
SOURCE_TYPE
.
DEPT
);
}
});
}
if
(
CollectionUtils
.
isNotEmpty
(
sharedAuthURD
.
getUserIds
()))
{
sharedAuthURD
.
getUserIds
().
forEach
(
id
->
{
if
(
CollectionUtils
.
isEmpty
(
addAuthURD
.
getUserIds
())
||
!
addAuthURD
.
getUserIds
().
contains
(
id
))
{
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
UNSHARE
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panelGroupId
,
panelGroup
.
getPid
(),
id
,
SysLogConstants
.
SOURCE_TYPE
.
USER
);
}
});
}
if
(
CollectionUtils
.
isNotEmpty
(
sharedAuthURD
.
getRoleIds
()))
{
sharedAuthURD
.
getRoleIds
().
forEach
(
id
->
{
if
(
CollectionUtils
.
isEmpty
(
addAuthURD
.
getRoleIds
())
||
!
addAuthURD
.
getRoleIds
().
contains
(
id
))
{
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
UNSHARE
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panelGroupId
,
panelGroup
.
getPid
(),
id
,
SysLogConstants
.
SOURCE_TYPE
.
ROLE
);
}
});
}
if
(
CollectionUtils
.
isNotEmpty
(
sharedAuthURD
.
getDeptIds
()))
{
sharedAuthURD
.
getDeptIds
().
forEach
(
id
->
{
if
(
CollectionUtils
.
isEmpty
(
addAuthURD
.
getDeptIds
())
||
!
addAuthURD
.
getDeptIds
().
contains
(
id
))
{
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
UNSHARE
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panelGroupId
,
panelGroup
.
getPid
(),
id
,
SysLogConstants
.
SOURCE_TYPE
.
DEPT
);
}
});
}
// 以上是业务代码
// 下面是消息发送
Set
<
Long
>
addUserIdSet
=
AuthUtils
.
userIdsByURD
(
addAuthURD
);
Set
<
Long
>
redUserIdSet
=
AuthUtils
.
userIdsByURD
(
sharedAuthURD
);
PanelGroup
panelGroup
=
panelGroupMapper
.
selectByPrimaryKey
(
panelGroupId
);
CurrentUserDto
user
=
AuthUtils
.
getUser
();
Gson
gson
=
new
Gson
();
String
msg
=
panelGroup
.
getName
();
...
...
@@ -343,7 +395,19 @@ public class ShareService {
@Transactional
public
void
removeShares
(
PanelShareRemoveRequest
removeRequest
)
{
String
panelId
=
removeRequest
.
getPanelId
();
PanelGroup
panelGroup
=
panelGroupMapper
.
selectByPrimaryKey
(
panelId
);
extPanelShareMapper
.
removeShares
(
removeRequest
);
SysLogConstants
.
SOURCE_TYPE
targetType
=
SysLogConstants
.
SOURCE_TYPE
.
USER
;
if
(
removeRequest
.
getType
()
==
1
)
{
targetType
=
SysLogConstants
.
SOURCE_TYPE
.
ROLE
;
}
else
if
(
removeRequest
.
getType
()
==
2
)
{
targetType
=
SysLogConstants
.
SOURCE_TYPE
.
DEPT
;
}
DeLogUtils
.
save
(
SysLogConstants
.
OPERATE_TYPE
.
UNSHARE
,
SysLogConstants
.
SOURCE_TYPE
.
PANEL
,
panelId
,
panelGroup
.
getPid
(),
removeRequest
.
getTargetId
(),
targetType
);
AuthURD
sharedAuthURD
=
new
AuthURD
();
List
<
Long
>
removeIds
=
new
ArrayList
<
Long
>(){{
add
(
removeRequest
.
getTargetId
());}};
buildRedAuthURD
(
removeRequest
.
getType
(),
removeIds
,
sharedAuthURD
);
...
...
backend/src/main/java/io/dataease/service/sys/log/LogManager.java
浏览文件 @
43eaf480
...
...
@@ -4,9 +4,11 @@ import com.google.gson.Gson;
import
com.google.gson.reflect.TypeToken
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.commons.utils.AuthUtils
;
import
io.dataease.controller.sys.request.LogTypeItem
;
import
io.dataease.dto.log.FolderItem
;
import
io.dataease.ext.ExtSysLogMapper
;
import
io.dataease.i18n.Translator
;
import
io.dataease.plugins.common.base.domain.Datasource
;
import
io.dataease.plugins.common.base.domain.SysLogWithBLOBs
;
import
io.dataease.plugins.common.dto.datasource.DataSourceType
;
import
io.dataease.service.datasource.DatasourceService
;
...
...
@@ -17,6 +19,7 @@ import org.springframework.stereotype.Component;
import
javax.annotation.Resource
;
import
java.lang.reflect.Type
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.stream.Collectors
;
...
...
@@ -66,26 +69,33 @@ public class LogManager {
public
String
remarkInfo
(
SysLogWithBLOBs
vo
)
{
String
remakrk
=
null
;
if
((
remakrk
=
vo
.
getRemark
())
!=
null
)
{
String
targetTypeName
=
null
;
List
<
FolderItem
>
targetInfos
=
gson
.
fromJson
(
remakrk
,
type
);
String
target
=
targetInfos
.
stream
().
map
(
item
->
{
if
(
CollectionUtils
.
isNotEmpty
(
targetInfos
))
{
String
template
=
targetInfos
.
stream
().
map
(
folderItem
->
folderItem
.
getName
()).
collect
(
Collectors
.
joining
(
"/"
));
FolderItem
item
=
targetInfos
.
get
(
0
);
Integer
targetType
=
item
.
getType
();
String
targetTypeName
=
SysLogConstants
.
sourceTypeName
(
targetType
);
return
String
.
format
(
format
,
targetTypeName
,
item
.
getName
()
);
}).
collect
(
Collectors
.
joining
(
"/"
)
);
return
target
;
targetTypeName
=
SysLogConstants
.
sourceTypeName
(
targetType
);
targetTypeName
=
Translator
.
get
(
targetTypeName
);
return
String
.
format
(
format
,
targetTypeName
,
template
);
}
}
return
""
;
}
public
List
<
FolderItem
>
parentsAndSelf
(
String
id
,
SysLogConstants
.
SOURCE_TYPE
type
)
{
Integer
value
=
type
.
getValue
();
private
LogTypeItem
parentIds
(
String
id
,
Integer
value
)
{
LogTypeItem
result
=
new
LogTypeItem
();
String
typeValue
=
""
;
Boolean
reversed
=
false
;
switch
(
value
)
{
case
2
:
typeValue
=
"dataset"
;
break
;
case
3
:
typeValue
=
"panel"
;
reversed
=
true
;
break
;
case
7
:
typeValue
=
"dept"
;
...
...
@@ -96,14 +106,47 @@ public class LogManager {
List
<
String
>
ids
=
new
ArrayList
<>();
if
(
StringUtils
.
isNotBlank
(
typeValue
))
{
ids
.
addAll
(
AuthUtils
.
parentResources
(
id
,
typeValue
));
}
else
{
ids
.
add
(
id
);
if
(
reversed
)
{
Collections
.
reverse
(
ids
);
}
}
result
.
setParentIds
(
ids
);
result
.
setTypeValue
(
typeValue
);
return
result
;
}
private
List
<
FolderItem
>
parentInfos
(
List
<
String
>
ids
,
Integer
value
){
List
<
FolderItem
>
folderItems
=
extSysLogMapper
.
idAndName
(
ids
,
value
);
if
(
value
==
3
)
{
folderItems
.
forEach
(
item
->
{
if
(
StringUtils
.
equals
(
"i18n_panel_list"
,
item
.
getName
()))
{
item
.
setName
(
Translator
.
get
(
item
.
getName
()));
}
});
}
folderItems
.
forEach
(
item
->
item
.
setType
(
value
));
return
folderItems
;
}
public
List
<
FolderItem
>
justParents
(
String
id
,
SysLogConstants
.
SOURCE_TYPE
type
)
{
Integer
value
=
type
.
getValue
();
LogTypeItem
typeItem
=
parentIds
(
id
,
value
);
List
<
String
>
ids
=
typeItem
.
getParentIds
();
ids
=
ids
.
stream
().
filter
(
item
->
!
StringUtils
.
equals
(
id
,
item
)).
collect
(
Collectors
.
toList
());
return
parentInfos
(
ids
,
value
);
}
public
List
<
FolderItem
>
parentsAndSelf
(
String
id
,
SysLogConstants
.
SOURCE_TYPE
type
)
{
Integer
value
=
type
.
getValue
();
LogTypeItem
logTypeItem
=
parentIds
(
id
,
value
);
if
(
CollectionUtils
.
isEmpty
(
logTypeItem
.
getParentIds
()))
{
logTypeItem
.
getParentIds
().
add
(
id
);
}
return
parentInfos
(
logTypeItem
.
getParentIds
(),
value
);
}
public
FolderItem
nameWithId
(
String
id
,
Integer
type
)
{
List
<
String
>
ids
=
new
ArrayList
<>();
ids
.
add
(
id
);
...
...
@@ -129,5 +172,10 @@ public class LogManager {
return
folderItem
;
}
public
FolderItem
dsTypeInfoById
(
String
dsId
)
{
Datasource
datasource
=
datasourceService
.
get
(
dsId
);
return
dsTypeInfo
(
datasource
.
getType
());
}
}
backend/src/main/java/io/dataease/service/sys/log/LogService.java
浏览文件 @
43eaf480
package
io
.
dataease
.
service
.
sys
.
log
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.ExcelWriter
;
import
com.alibaba.excel.write.metadata.WriteSheet
;
import
com.google.gson.Gson
;
import
io.dataease.auth.api.dto.CurrentUserDto
;
import
io.dataease.commons.constants.SysLogConstants
;
import
io.dataease.commons.utils.AuthUtils
;
import
io.dataease.commons.utils.BeanUtils
;
import
io.dataease.commons.utils.CustomCellWriteUtil
;
import
io.dataease.controller.sys.base.BaseGridRequest
;
import
io.dataease.controller.sys.base.ConditionEntity
;
import
io.dataease.dto.SysLogDTO
;
import
io.dataease.dto.SysLogGridDTO
;
import
io.dataease.dto.log.FolderItem
;
import
io.dataease.dto.log.LogExcel
;
import
io.dataease.ext.ExtSysLogMapper
;
import
io.dataease.ext.query.GridExample
;
import
io.dataease.i18n.Translator
;
import
io.dataease.plugins.common.base.domain.SysLogWithBLOBs
;
import
io.dataease.plugins.common.base.mapper.SysLogMapper
;
import
mondrian.olap.fun.vba.Excel
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -23,8 +30,13 @@ import org.springframework.stereotype.Service;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.net.URLEncoder
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.stream.Collectors
;
...
...
@@ -142,7 +154,32 @@ public class LogService {
}
public
void
exportExcel
(
HttpServletResponse
response
)
throws
Exception
{
BaseGridRequest
request
=
new
BaseGridRequest
();
GridExample
gridExample
=
request
.
convertExample
();
List
<
SysLogWithBLOBs
>
lists
=
extSysLogMapper
.
query
(
gridExample
);
List
<
LogExcel
>
excels
=
lists
.
stream
().
map
(
item
->
{
LogExcel
logExcel
=
new
LogExcel
();
String
operateTypeName
=
SysLogConstants
.
operateTypeName
(
item
.
getOperateType
());
String
sourceTypeName
=
SysLogConstants
.
sourceTypeName
(
item
.
getSourceType
());
logExcel
.
setOptype
(
Translator
.
get
(
operateTypeName
)
+
" "
+
Translator
.
get
(
sourceTypeName
));
logExcel
.
setDetail
(
logManager
.
detailInfo
(
item
));
logExcel
.
setUser
(
item
.
getNickName
());
logExcel
.
setTime
(
DateUtil
.
formatDateTime
(
new
Date
(
item
.
getTime
())));
return
logExcel
;
}).
collect
(
Collectors
.
toList
());
// 导出时候会出现中⽂⽆法识别问题,需要转码
String
name
=
"log.xlsx"
;
String
fileName
=
new
String
(
name
.
getBytes
(
"gb2312"
),
"ISO8859-1"
);
response
.
setContentType
(
"application/vnd.ms-excel;chartset=utf-8"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
fileName
);
//调⽤⼯具类
ExcelWriter
writer
=
EasyExcel
.
write
(
response
.
getOutputStream
()).
build
();
WriteSheet
sheet
=
EasyExcel
.
writerSheet
(
0
,
"sheet"
).
head
(
LogExcel
.
class
).
registerWriteHandler
(
new
CustomCellWriteUtil
()).
build
();
writer
.
write
(
excels
,
sheet
);
writer
.
finish
();
// 使⽤完毕之后要关闭
}
}
backend/src/main/resources/i18n/messages_en_US.properties
浏览文件 @
43eaf480
...
...
@@ -129,6 +129,7 @@ i18n_wrong_tel=Wrong tel format
i18n_wrong_email
=
Wrong email format
i18n_wrong_name_format
=
Wrong name format
日志管理=Log
OPERATE_TYPE_CREATE
=
Create
OPERATE_TYPE_MODIFY
=
Modify
...
...
@@ -141,10 +142,10 @@ OPERATE_TYPE_CREATELINK=Create Link
OPERATE_TYPE_DELETELINK
=
Delete Link
OPERATE_TYPE_MODIFYLINK
=
Modify Link
SOURCE_TYPE_DATASOURCE
=
数据源
SOURCE_TYPE_DATASET
=
数据集
SOURCE_TYPE_PANEL
=
仪表板
SOURCE_TYPE_VIEW
=
视图
SOURCE_TYPE_USER
=
用户
SOURCE_TYPE_DEPT
=
组织
SOURCE_TYPE_ROLE
=
角色
SOURCE_TYPE_DATASOURCE
=
DATASOURCE
SOURCE_TYPE_DATASET
=
DATASET
SOURCE_TYPE_PANEL
=
PANEL
SOURCE_TYPE_VIEW
=
VIEW
SOURCE_TYPE_USER
=
USER
SOURCE_TYPE_DEPT
=
ORG
SOURCE_TYPE_ROLE
=
ROLE
backend/src/main/resources/i18n/messages_zh_CN.properties
浏览文件 @
43eaf480
...
...
@@ -128,6 +128,7 @@ i18n_wrong_tel=电话格式错误
i18n_wrong_email
=
邮箱格式错误
i18n_wrong_name_format
=
姓名格式错误
日志管理=审计日志
OPERATE_TYPE_CREATE
=
创建
OPERATE_TYPE_MODIFY
=
修改
OPERATE_TYPE_DELETE
=
删除
...
...
backend/src/main/resources/i18n/messages_zh_TW.properties
浏览文件 @
43eaf480
...
...
@@ -129,6 +129,7 @@ i18n_wrong_tel=電話格式錯誤
i18n_wrong_email
=
郵箱格式錯誤
i18n_wrong_name_format
=
姓名格式錯誤
日志管理=審計日誌
OPERATE_TYPE_CREATE
=
創建
OPERATE_TYPE_MODIFY
=
修改
OPERATE_TYPE_DELETE
=
刪除
...
...
frontend/src/api/dataset/dataset.js
浏览文件 @
43eaf480
...
...
@@ -26,11 +26,12 @@ export function addGroup(data) {
})
}
export
function
delGroup
(
groupId
)
{
export
function
delGroup
(
data
)
{
return
request
({
url
:
'/dataset/group/delete
/'
+
groupId
,
url
:
'/dataset/group/delete
'
,
loading
:
true
,
method
:
'post'
method
:
'post'
,
data
})
}
...
...
frontend/src/api/system/log.js
浏览文件 @
43eaf480
...
...
@@ -21,6 +21,7 @@ export function exportExcel() {
return
request
({
url
:
'/api/log/export'
,
method
:
'post'
,
loading
:
true
loading
:
true
,
responseType
:
'blob'
})
}
frontend/src/icons/svg/log.svg
0 → 100644
浏览文件 @
43eaf480
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
class=
"icon"
width=
"200px"
height=
"200.00px"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
><path
d=
"M96 652.8c-19.2 0-38.4-19.2-38.4-38.4V409.6c0-19.2 19.2-38.4 38.4-38.4s38.4 19.2 38.4 38.4v204.8c0 25.6-12.8 38.4-38.4 38.4z"
/><path
d=
"M1017.6 512c0-51.2-32-89.6-76.8-102.4V160c0-83.2-64-147.2-147.2-147.2H204.8C121.6 12.8 57.6 76.8 57.6 160v19.2c0 19.2 19.2 38.4 38.4 38.4s38.4-19.2 38.4-38.4v-19.2c0-38.4 32-70.4 70.4-70.4h595.2c38.4 0 70.4 32 70.4 70.4V409.6c-38.4 12.8-76.8 57.6-76.8 102.4 0 51.2 32 89.6 76.8 102.4v249.6c0 38.4-32 70.4-70.4 70.4H204.8c-38.4 0-70.4-32-70.4-70.4v-19.2c0-19.2-19.2-38.4-38.4-38.4s-38.4 19.2-38.4 38.4v19.2c0 83.2 64 147.2 147.2 147.2h595.2c83.2 0 147.2-64 147.2-147.2V620.8c44.8-19.2 70.4-57.6 70.4-108.8z m-108.8 51.2c-25.6 0-51.2-19.2-51.2-51.2 0-25.6 19.2-51.2 51.2-51.2s51.2 19.2 51.2 51.2c-6.4 25.6-25.6 51.2-51.2 51.2z"
/><path
d=
"M659.2 332.8H345.6c-19.2 0-38.4-12.8-38.4-38.4 0-19.2 19.2-38.4 38.4-38.4h313.6c19.2 0 38.4 19.2 38.4 38.4 0 25.6-19.2 38.4-38.4 38.4zM659.2 550.4H345.6c-19.2 0-38.4-12.8-38.4-38.4 0-19.2 19.2-38.4 38.4-38.4h313.6c19.2 0 38.4 19.2 38.4 38.4 0 25.6-19.2 38.4-38.4 38.4zM659.2 768H345.6c-19.2 0-38.4-19.2-38.4-38.4s19.2-38.4 38.4-38.4h313.6c19.2 0 38.4 19.2 38.4 38.4 0 25.6-19.2 38.4-38.4 38.4z"
/><path
d=
"M153.6 768H44.8c-19.2 0-38.4-19.2-38.4-38.4s19.2-38.4 38.4-38.4h108.8c19.2 0 38.4 19.2 38.4 38.4 0 25.6-19.2 38.4-38.4 38.4z"
/><path
d=
"M153.6 332.8H44.8c-25.6 0-38.4-12.8-38.4-38.4 0-19.2 12.8-38.4 38.4-38.4h108.8c19.2 0 38.4 19.2 38.4 38.4 0 25.6-19.2 38.4-38.4 38.4z"
/></svg>
\ No newline at end of file
frontend/src/lang/en.js
浏览文件 @
43eaf480
...
...
@@ -1328,7 +1328,7 @@ export default {
sql_ds_union_error
:
'Direct connect SQL dataset can not be union'
,
api_data
:
'API dataset'
},
driver
:{
driver
:
{
driver
:
'Driver'
,
please_choose_driver
:
'Please choose driver'
,
mgm
:
'Driver'
,
...
...
@@ -2040,6 +2040,15 @@ export default {
user
:
'User'
,
passwd
:
'Password'
},
log
:
{
title
:
'Operate Log'
,
optype
:
'Operate Type'
,
detail
:
'Detail'
,
user
:
'User'
,
time
:
'Time'
,
export
:
'Export'
,
search_by_key
:
'Search by key'
},
plugin_style
:
{
border
:
'Border'
}
...
...
frontend/src/lang/tw.js
浏览文件 @
43eaf480
...
...
@@ -1328,7 +1328,7 @@ export default {
sql_ds_union_error
:
'直連模式下SQL數據集,不支持關聯'
,
api_data
:
'API 數據集'
},
driver
:{
driver
:
{
driver
:
'驅動'
,
please_choose_driver
:
'青選擇驅動'
,
mgm
:
'驅動管理'
,
...
...
@@ -2051,6 +2051,15 @@ export default {
user
:
'用戶名'
,
passwd
:
'密碼'
},
log
:
{
title
:
'操作日誌'
,
optype
:
'操作類型'
,
detail
:
'操作詳情'
,
user
:
'操作用戶'
,
time
:
'操作時間'
,
export
:
'導出'
,
search_by_key
:
'搜索詳情'
},
plugin_style
:
{
border
:
'边框'
}
...
...
frontend/src/styles/index.scss
浏览文件 @
43eaf480
...
...
@@ -829,4 +829,7 @@ div:focus {
}
.fu-operator-component__operator
{
display
:
none
!
important
;
}
.fu-operator-component__label
{
width
:
100px
!
important
;
}
\ No newline at end of file
frontend/src/views/dataset/group/Group.vue
浏览文件 @
43eaf480
...
...
@@ -232,7 +232,7 @@ import { loadTable, getScene, addGroup, delGroup, delTable, post, isKettleRunnin
import
GroupMoveSelector
from
'./GroupMoveSelector'
import
DsMoveSelector
from
'./DsMoveSelector'
import
{
queryAuthModel
}
from
'@/api/authModel/authModel'
import
{
engineMode
}
from
"@/api/system/engine"
;
import
{
engineMode
}
from
'@/api/system/engine'
export
default
{
name
:
'Group'
,
...
...
@@ -461,7 +461,8 @@ export default {
cancelButtonText
:
this
.
$t
(
'dataset.cancel'
),
type
:
'warning'
}).
then
(()
=>
{
delGroup
(
data
.
id
).
then
(
response
=>
{
const
param
=
{
id
:
data
.
id
,
pid
:
data
.
pid
}
delGroup
(
param
).
then
(
response
=>
{
this
.
$message
({
type
:
'success'
,
message
:
this
.
$t
(
'dataset.delete_success'
),
...
...
@@ -476,9 +477,9 @@ export default {
deleteTable
(
data
)
{
let
confirm_delete_msg
=
''
if
(
data
.
modelInnerType
===
'union'
||
data
.
modelInnerType
===
'custom'
)
{
if
(
data
.
modelInnerType
===
'union'
||
data
.
modelInnerType
===
'custom'
)
{
confirm_delete_msg
=
this
.
$t
(
'dataset.confirm_delete'
)
}
else
{
}
else
{
confirm_delete_msg
=
this
.
$t
(
'dataset.confirm_delete_msg'
)
}
this
.
$confirm
(
confirm_delete_msg
,
this
.
$t
(
'dataset.tips'
),
{
...
...
frontend/src/views/system/log/index.vue
浏览文件 @
43eaf480
...
...
@@ -4,7 +4,6 @@
v-loading=
"$store.getters.loadingMap[$store.getters.currentPath]"
:data=
"data"
:columns=
"columns"
local-key=
"logGrid"
:search-config=
"searchConfig"
:pagination-config=
"paginationConfig"
@
select=
"select"
...
...
@@ -15,13 +14,13 @@
<el-button
v-permission=
"['log:export']"
icon=
"el-icon-download"
size=
"mini"
@
click=
"exportData"
>
{{
$t
(
'log.export'
)
}}
</el-button>
</
template
>
<el-table-column
prop=
"opType"
:label=
"$t('log.optype')"
width=
"12
0"
>
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"opType"
:label=
"$t('log.optype')"
width=
"14
0"
>
<
template
v-slot:default=
"{row}"
>
<span>
{{
row
.
opType
+
row
.
sourceType
}}
</span>
</
template
>
</el-table-column>
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"detail"
:label=
"$t('log.detail')"
/>
<el-table-column
prop=
"user"
:label=
"$t('log.user')"
width=
"8
0"
/>
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"user"
:label=
"$t('log.user')"
width=
"10
0"
/>
<el-table-column
:show-overflow-tooltip=
"true"
prop=
"time"
sortable=
"custom"
:label=
"$t('log.time')"
width=
"180"
>
<
template
v-slot:default=
"scope"
>
<span>
{{
scope
.
row
.
time
|
timestampFormatDate
}}
</span>
...
...
@@ -96,7 +95,14 @@ export default {
exportData
()
{
console
.
log
(
'exportting...'
)
exportExcel
().
then
(
res
=>
{
const
blob
=
new
Blob
([
res
],
{
type
:
'application/vnd.ms-excel'
})
const
link
=
document
.
createElement
(
'a'
)
link
.
style
.
display
=
'none'
link
.
href
=
URL
.
createObjectURL
(
blob
)
link
.
download
=
'log.xlsx'
// 下载的文件名
document
.
body
.
appendChild
(
link
)
link
.
click
()
document
.
body
.
removeChild
(
link
)
})
},
...
...
frontend/src/views/system/user/index.vue
浏览文件 @
43eaf480
...
...
@@ -5,7 +5,6 @@
v-loading=
"$store.getters.loadingMap[$store.getters.currentPath]"
:data=
"data"
:columns=
"columns"
local-key=
"userGrid"
:search-config=
"searchConfig"
:pagination-config=
"paginationConfig"
@
select=
"select"
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论