Merge pull request #7549 from dataease/pr@dev-v2@feat_log

Pr@dev v2@feat log
This commit is contained in:
fit2cloud-chenyw 2024-01-09 10:56:37 +08:00 committed by GitHub
commit 0e640403cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 285 additions and 2 deletions

View File

@ -2,5 +2,6 @@
ser = "ser"
Referer = "Referer"
Encryp = "Encryp"
OT = "OT"
[files]
extend-exclude = ["mapFiles/**"]

View File

@ -7,7 +7,10 @@ import io.dataease.api.dataset.dto.SqlVariableDetails;
import io.dataease.api.dataset.union.DatasetGroupInfoDTO;
import io.dataease.api.dataset.vo.DataSetBarVO;
import io.dataease.commons.constants.OptConstants;
import io.dataease.constant.LogOT;
import io.dataease.constant.LogST;
import io.dataease.dataset.manage.DatasetGroupManage;
import io.dataease.log.DeLog;
import io.dataease.model.BusiNodeRequest;
import io.dataease.model.BusiNodeVO;
import jakarta.annotation.Resource;
@ -23,16 +26,19 @@ public class DatasetTreeServer implements DatasetTreeApi {
private DatasetGroupManage datasetGroupManage;
@DeLog(id = "#p0.id", ot = LogOT.MODIFY, st = LogST.DATASET)
@Override
public DatasetGroupInfoDTO save(DatasetGroupInfoDTO datasetNodeDTO) throws Exception {
return datasetGroupManage.save(datasetNodeDTO, false);
}
@DeLog(id = "#p0.id", ot = LogOT.MODIFY, st = LogST.DATASET)
@Override
public DatasetNodeDTO rename(DatasetGroupInfoDTO dto) throws Exception {
return datasetGroupManage.save(dto, true);
}
@DeLog(id = "#p0.id", pid = "#p0.pid", ot = LogOT.CREATE, st = LogST.DATASET)
@Override
public DatasetNodeDTO create(DatasetGroupInfoDTO dto) throws Exception {
return datasetGroupManage.save(dto, false);

View File

@ -97,6 +97,7 @@ public class MenuManage {
|| coreMenu.getPid().equals(21L)
|| coreMenu.getId().equals(25L)
|| coreMenu.getId().equals(26L)
|| coreMenu.getId().equals(35L);
|| coreMenu.getId().equals(35L)
|| coreMenu.getId().equals(40L);
}
}

View File

@ -4,7 +4,7 @@ spring:
username: root
password: 123456
messages:
basename: i18n/lic,i18n/core,i18n/permissions
basename: i18n/lic,i18n/core,i18n/permissions,i18n/xpack
flyway:
enabled: true
table: de_standalone_version

View File

@ -61,3 +61,4 @@ i18n_table_name_repeat=\u540D\u79F0\u91CD\u590D:
i18n_sql_not_empty=sql \u4E0D\u80FD\u4E3A\u7A7A
i18n_menu.parameter=\u7CFB\u7EDF\u53C2\u6570
i18n_user_old_pwd_error=\u539F\u59CB\u5BC6\u7801\u9519\u8BEF
i18n_menu.toolbox-log=\u64CD\u4F5C\u65E5\u5FD7

View File

@ -0,0 +1,40 @@
package io.dataease.api.log;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.dataease.api.log.dto.LogGridRequest;
import io.dataease.api.log.vo.LogGridVO;
import io.dataease.api.log.vo.LogOpVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@Tag(name = "工具箱:日志管理")
@ApiSupport(order = 2)
public interface LogApi {
@Operation(summary = "查询日志列表")
@Parameters({
@Parameter(name = "goPage", description = "目标页码", required = true, in = ParameterIn.PATH),
@Parameter(name = "pageSize", description = "每页容量", required = true, in = ParameterIn.PATH),
@Parameter(name = "request", description = "过滤条件", required = true)
})
@PostMapping("/pager/{goPage}/{pageSize}")
IPage<LogGridVO> pager(@PathVariable("goPage") int goPage, @PathVariable("pageSize") int pageSize, @RequestBody LogGridRequest request);
@Operation(summary = "导出日志列表")
@PostMapping("/export")
void export(@RequestBody LogGridRequest request);
@Operation(summary = "操作类型")
@GetMapping("/options")
List<LogOpVO> logOptions();
}

View File

@ -0,0 +1,21 @@
package io.dataease.api.log.dto;
import io.dataease.model.KeywordRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class LogGridRequest extends KeywordRequest implements Serializable {
private String op;
private Long uid;
private Long oid;
private List<Long> time;
}

View File

@ -0,0 +1,19 @@
package io.dataease.api.log.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class LogGridVO implements Serializable {
private String opText;
private String opDetail;
private String name;
private String ip;
private Long time;
}

View File

@ -0,0 +1,20 @@
package io.dataease.api.log.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LogOpVO implements Serializable {
private String value;
private String label;
private List<LogOpVO> children;
}

View File

@ -7,6 +7,7 @@ import io.dataease.api.permissions.auth.dto.BusiPerCheckDTO;
import io.dataease.api.permissions.auth.dto.BusiResourceCreator;
import io.dataease.api.permissions.auth.dto.BusiResourceEditor;
import io.dataease.api.permissions.auth.dto.BusiResourceMover;
import io.dataease.api.permissions.auth.vo.ResourceNodeVO;
import io.dataease.model.BusiNodeRequest;
import io.dataease.model.BusiNodeVO;
import io.swagger.v3.oas.annotations.Hidden;
@ -71,4 +72,7 @@ public interface InteractiveAuthApi {
@PostMapping("/checkAuth")
void checkAuth(@RequestBody BusiPerCheckDTO checkDTO);
@GetMapping("/query2Root/{id}/{flag}")
List<ResourceNodeVO> query2Root(@PathVariable("id") Long id, @PathVariable("flag") Integer flag);
}

View File

@ -0,0 +1,13 @@
package io.dataease.api.permissions.auth.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class ResourceNodeVO implements Serializable {
private Long id;
private String name;
}

View File

@ -5,6 +5,7 @@ import io.dataease.api.permissions.org.dto.OrgCreator;
import io.dataease.api.permissions.org.dto.OrgEditor;
import io.dataease.api.permissions.org.dto.OrgRequest;
import io.dataease.api.permissions.org.vo.MountedVO;
import io.dataease.api.permissions.org.vo.OrgDetailVO;
import io.dataease.api.permissions.org.vo.OrgPageVO;
import io.dataease.auth.DeApiPath;
import io.dataease.auth.DePermit;
@ -56,4 +57,8 @@ public interface OrgApi {
@Operation(summary = "", hidden = true)
@GetMapping("/resourceExist/{oid}")
boolean resourceExist(@PathVariable("oid") Long oid);
@Operation(hidden = true)
@GetMapping("/detail/{oid}")
OrgDetailVO detail(@PathVariable("oid") Long oid);
}

View File

@ -0,0 +1,20 @@
package io.dataease.api.permissions.org.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OrgDetailVO {
private Long id;
private String name;
private Long pid;
private String rootPath;
}

View File

@ -1,5 +1,6 @@
package io.dataease.api.permissions.role.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -17,6 +18,9 @@ public class RoleCreator implements Serializable {
private Integer typeCode;
@Schema(description = "描述", hidden = true)
private String desc;
@JsonIgnore
@Schema(hidden = true)
private Long rid;
}

View File

@ -1,5 +1,6 @@
package io.dataease.api.permissions.user.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -27,4 +28,7 @@ public class UserCreator implements Serializable {
private List<Long> roleIds;
@Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
private Boolean enable;
@Schema(hidden = true)
@JsonIgnore
private Long uid;
}

View File

@ -0,0 +1,39 @@
package io.dataease.constant;
import java.util.Arrays;
public enum LogOT {
CREATE(1, "OPERATE_TYPE_CREATE"),
MODIFY(2, "OPERATE_TYPE_MODIFY"),
DELETE(3, "OPERATE_TYPE_DELETE"),
READ(4, "OPERATE_TYPE_READ"),
EXPORT(5, "OPERATE_TYPE_EXPORT"),
AUTHORIZE(6, "OPERATE_TYPE_AUTHORIZE"),
UNAUTHORIZE(7, "OPERATE_TYPE_UNAUTHORIZE"),
CREATELINK(8, "OPERATE_TYPE_CREATELINK"),
DELETELINK(9, "OPERATE_TYPE_DELETELINK"),
MODIFYLINK(10, "OPERATE_TYPE_MODIFYLINK"),
UPLOADFILE(11, "OPERATE_TYPE_UPLOADFILE"),
BIND(12, "OPERATE_TYPE_BIND"),
UNBIND(13, "OPERATE_TYPE_UNBIND"),
LOGIN(14, "OPERATE_TYPE_LOGIN");
private Integer value;
private String name;
LogOT(Integer value, String name) {
this.value = value;
this.name = name;
}
public static LogOT fromValue(Integer value) {
return Arrays.stream(values()).filter(v -> v.value.equals(value)).findFirst().get();
}
public Integer getValue() {
return value;
}
public String getName() {
return name;
}
}

View File

@ -0,0 +1,42 @@
package io.dataease.constant;
import java.util.Arrays;
public enum LogST {
PANEL(1, "SOURCE_TYPE_PANEL"),
SCREEN(2, "SOURCE_TYPE_SCREEN"),
DATASET(3, "SOURCE_TYPE_DATASET"),
DATASOURCE(4, "SOURCE_TYPE_DATASOURCE"),
USER(5, "SOURCE_TYPE_USER"),
ROLE(6, "SOURCE_TYPE_ROLE"),
ORG(7, "SOURCE_TYPE_DEPT"),
VIEW(8, "SOURCE_TYPE_VIEW"),
LINK(9, "SOURCE_TYPE_LINK"),
DRIVER(10, "SOURCE_TYPE_DRIVER"),
DRIVER_FILE(11, "SOURCE_TYPE_DRIVER_FILE"),
MENU(12, "SOURCE_TYPE_MENU"),
APIKEY(13, "SOURCE_TYPE_APIKEY");
private Integer value;
private String name;
public Integer getValue() {
return value;
}
public String getName() {
return name;
}
LogST(Integer value, String name) {
this.value = value;
this.name = name;
}
public static LogST fromValue(Integer value) {
return Arrays.stream(values()).filter(v -> v.value.equals(value)).findFirst().get();
}
LogST() {
}
}

View File

@ -0,0 +1,19 @@
package io.dataease.log;
import io.dataease.constant.LogOT;
import io.dataease.constant.LogST;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DeLog {
String id() default "";
String pid() default "";
LogST st();
LogOT ot();
}

View File

@ -0,0 +1,16 @@
package io.dataease.model;
import io.dataease.constant.LogST;
import lombok.Data;
import java.io.Serializable;
@Data
public class LogItemModel implements Serializable {
private Long id;
private String name;
private LogST st;
}

View File

@ -35,4 +35,12 @@ public class CommonBeanFactory implements ApplicationContextAware {
public static ApplicationContext getApplicationContext() {
return context;
}
public static <T> T proxy(Class<T> className) {
try {
return context != null && className != null ? context.getBean(className) : null;
} catch (BeansException e) {
return null;
}
}
}