Commit 7c6d01940ed5f02044651b0d896ca1e69e1a0249

Authored by xp.Huang
2 parents 7953e6ab 3d32d119

Merge branch '20220615' into 'master'

20220615

See merge request huang/thingsboard3.3.2!107
... ... @@ -331,7 +331,7 @@ public abstract class BaseController {
331 331 }
332 332
333 333 <T> T checkNotNull(Optional<T> reference) throws ThingsboardException {
334   - return checkNotNull(reference, "Requested item wasn't found!");
  334 + return checkNotNull(reference, "请求的内容不存在!");
335 335 }
336 336
337 337 <T> T checkNotNull(Optional<T> reference, String notFoundMessage) throws ThingsboardException {
... ... @@ -344,13 +344,13 @@ public abstract class BaseController {
344 344
345 345 void checkParameter(String name, String param) throws ThingsboardException {
346 346 if (StringUtils.isEmpty(param)) {
347   - throw new ThingsboardException("Parameter '" + name + "' can't be empty!", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
  347 + throw new ThingsboardException("参数【 " + name + "】不能为空!", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
348 348 }
349 349 }
350 350
351 351 void checkArrayParameter(String name, String[] params) throws ThingsboardException {
352 352 if (params == null || params.length == 0) {
353   - throw new ThingsboardException("Parameter '" + name + "' can't be empty!", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
  353 + throw new ThingsboardException("参数【 " + name + "】不能为空!", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
354 354 } else {
355 355 for (String param : params) {
356 356 checkParameter(name, param);
... ... @@ -369,7 +369,7 @@ public abstract class BaseController {
369 369 try {
370 370 direction = SortOrder.Direction.valueOf(sortOrder.toUpperCase());
371 371 } catch (IllegalArgumentException e) {
372   - throw new ThingsboardException("Unsupported sort order '" + sortOrder + "'! Only 'ASC' or 'DESC' types are allowed.", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
  372 + throw new ThingsboardException("不支持的排序规则【" + sortOrder + "】!只支持 'ASC' 或 'DESC'.", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
373 373 }
374 374 }
375 375 SortOrder sort = new SortOrder(sortProperty, direction);
... ... @@ -390,7 +390,7 @@ public abstract class BaseController {
390 390 if (authentication != null && authentication.getPrincipal() instanceof SecurityUser) {
391 391 return (SecurityUser) authentication.getPrincipal();
392 392 } else {
393   - throw new ThingsboardException("You aren't authorized to perform this operation!", ThingsboardErrorCode.AUTHENTICATION);
  393 + throw new ThingsboardException("你没有权限执行改操作!", ThingsboardErrorCode.AUTHENTICATION);
394 394 }
395 395 }
396 396
... ... @@ -398,7 +398,7 @@ public abstract class BaseController {
398 398 try {
399 399 validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
400 400 Tenant tenant = tenantService.findTenantById(tenantId);
401   - checkNotNull(tenant, "Tenant with id [" + tenantId + "] is not found");
  401 + checkNotNull(tenant, "ID【" + tenantId + "】相关的租户不存在");
402 402 accessControlService.checkPermission(getCurrentUser(), Resource.TENANT, operation, tenantId, tenant);
403 403 return tenant;
404 404 } catch (Exception e) {
... ... @@ -410,7 +410,7 @@ public abstract class BaseController {
410 410 try {
411 411 validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
412 412 TenantInfo tenant = tenantService.findTenantInfoById(tenantId);
413   - checkNotNull(tenant, "Tenant with id [" + tenantId + "] is not found");
  413 + checkNotNull(tenant, "ID【" + tenantId + "】相关的租户不存在");
414 414 accessControlService.checkPermission(getCurrentUser(), Resource.TENANT, operation, tenantId, tenant);
415 415 return tenant;
416 416 } catch (Exception e) {
... ... @@ -420,9 +420,9 @@ public abstract class BaseController {
420 420
421 421 TenantProfile checkTenantProfileId(TenantProfileId tenantProfileId, Operation operation) throws ThingsboardException {
422 422 try {
423   - validateId(tenantProfileId, "Incorrect tenantProfileId " + tenantProfileId);
  423 + validateId(tenantProfileId, "错误的租户配置ID " + tenantProfileId);
424 424 TenantProfile tenantProfile = tenantProfileService.findTenantProfileById(getTenantId(), tenantProfileId);
425   - checkNotNull(tenantProfile, "Tenant profile with id [" + tenantProfileId + "] is not found");
  425 + checkNotNull(tenantProfile, "ID【" + tenantProfileId + "】相关的租户配置不存在");
426 426 accessControlService.checkPermission(getCurrentUser(), Resource.TENANT_PROFILE, operation);
427 427 return tenantProfile;
428 428 } catch (Exception e) {
... ... @@ -436,9 +436,9 @@ public abstract class BaseController {
436 436
437 437 protected Customer checkCustomerId(CustomerId customerId, Operation operation) throws ThingsboardException {
438 438 try {
439   - validateId(customerId, "Incorrect customerId " + customerId);
  439 + validateId(customerId, "客户ID不正确 " + customerId);
440 440 Customer customer = customerService.findCustomerById(getTenantId(), customerId);
441   - checkNotNull(customer, "Customer with id [" + customerId + "] is not found");
  441 + checkNotNull(customer, "ID【" + customerId + "】相关的客户不存在");
442 442 accessControlService.checkPermission(getCurrentUser(), Resource.CUSTOMER, operation, customerId, customer);
443 443 return customer;
444 444 } catch (Exception e) {
... ... @@ -448,9 +448,9 @@ public abstract class BaseController {
448 448
449 449 protected User checkUserId(UserId userId, Operation operation) throws ThingsboardException {
450 450 try {
451   - validateId(userId, "Incorrect userId " + userId);
  451 + validateId(userId, "用户ID不正确 " + userId);
452 452 User user = userService.findUserById(getCurrentUser().getTenantId(), userId);
453   - checkNotNull(user, "User with id [" + userId + "] is not found");
  453 + checkNotNull(user, "ID【" + userId + "】相关的用户不存在");
454 454 accessControlService.checkPermission(getCurrentUser(), Resource.USER, operation, userId, user);
455 455 return user;
456 456 } catch (Exception e) {
... ... @@ -470,9 +470,9 @@ public abstract class BaseController {
470 470 protected void checkEntityId(EntityId entityId, Operation operation) throws ThingsboardException {
471 471 try {
472 472 if (entityId == null) {
473   - throw new ThingsboardException("Parameter entityId can't be empty!", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
  473 + throw new ThingsboardException("参数entityId不能为空!", ThingsboardErrorCode.BAD_REQUEST_PARAMS);
474 474 }
475   - validateId(entityId.getId(), "Incorrect entityId " + entityId);
  475 + validateId(entityId.getId(), "entityId不正确 " + entityId);
476 476 switch (entityId.getEntityType()) {
477 477 case ALARM:
478 478 checkAlarmId(new AlarmId(entityId.getId()), operation);
... ... @@ -526,7 +526,7 @@ public abstract class BaseController {
526 526 checkOtaPackageId(new OtaPackageId(entityId.getId()), operation);
527 527 return;
528 528 default:
529   - throw new IllegalArgumentException("Unsupported entity type: " + entityId.getEntityType());
  529 + throw new IllegalArgumentException("不支持的资源类型: " + entityId.getEntityType());
530 530 }
531 531 } catch (Exception e) {
532 532 throw handleException(e, false);
... ... @@ -535,9 +535,9 @@ public abstract class BaseController {
535 535
536 536 public Device checkDeviceId(DeviceId deviceId, Operation operation) throws ThingsboardException {
537 537 try {
538   - validateId(deviceId, "Incorrect deviceId " + deviceId);
  538 + validateId(deviceId, "deviceId不正确 " + deviceId);
539 539 Device device = deviceService.findDeviceById(getCurrentUser().getTenantId(), deviceId);
540   - checkNotNull(device, "Device with id [" + deviceId + "] is not found");
  540 + checkNotNull(device, "ID【" + deviceId + "】相关的设备不存在");
541 541 accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, deviceId, device);
542 542 return device;
543 543 } catch (Exception e) {
... ... @@ -547,9 +547,9 @@ public abstract class BaseController {
547 547
548 548 DeviceInfo checkDeviceInfoId(DeviceId deviceId, Operation operation) throws ThingsboardException {
549 549 try {
550   - validateId(deviceId, "Incorrect deviceId " + deviceId);
  550 + validateId(deviceId, "deviceId不正确" + deviceId);
551 551 DeviceInfo device = deviceService.findDeviceInfoById(getCurrentUser().getTenantId(), deviceId);
552   - checkNotNull(device, "Device with id [" + deviceId + "] is not found");
  552 + checkNotNull(device, "ID【" + deviceId + "】相关的设备不存在");
553 553 accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, deviceId, device);
554 554 return device;
555 555 } catch (Exception e) {
... ... @@ -559,9 +559,9 @@ public abstract class BaseController {
559 559
560 560 protected DeviceProfile checkDeviceProfileId(DeviceProfileId deviceProfileId, Operation operation) throws ThingsboardException {
561 561 try {
562   - validateId(deviceProfileId, "Incorrect deviceProfileId " + deviceProfileId);
  562 + validateId(deviceProfileId, "设备配置Id不正确 " + deviceProfileId);
563 563 DeviceProfile deviceProfile = deviceProfileService.findDeviceProfileById(getCurrentUser().getTenantId(), deviceProfileId);
564   - checkNotNull(deviceProfile, "Device profile with id [" + deviceProfileId + "] is not found");
  564 + checkNotNull(deviceProfile, "ID【" + deviceProfileId + "】相关的设备配置不存在");
565 565 accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE_PROFILE, operation, deviceProfileId, deviceProfile);
566 566 return deviceProfile;
567 567 } catch (Exception e) {
... ...
... ... @@ -84,7 +84,7 @@ public class YtMenuController extends BaseController {
84 84 @PreAuthorize("hasAnyAuthority('SYS_ADMIN','PLATFORM_ADMIN')")
85 85 public void deleteMenus(@RequestBody String[] ids) throws ThingsboardException {
86 86 if (ids.length == 0) {
87   - throw new YtDataValidationException("please provide menu ids to delete");
  87 + throw new YtDataValidationException("需要删除的菜单不能为空");
88 88 }
89 89 menuService.deleteMenus(getCurrentUser().getCurrentTenantId(), ids);
90 90 }
... ...
  1 +package org.thingsboard.server.controller.yunteng;
  2 +
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  4 +import io.swagger.annotations.Api;
  5 +import io.swagger.annotations.ApiOperation;
  6 +import lombok.RequiredArgsConstructor;
  7 +import org.apache.commons.lang3.StringUtils;
  8 +import org.springframework.security.access.prepost.PreAuthorize;
  9 +import org.springframework.web.bind.annotation.*;
  10 +import org.thingsboard.server.common.data.EntityType;
  11 +import org.thingsboard.server.common.data.audit.ActionType;
  12 +import org.thingsboard.server.common.data.exception.ThingsboardException;
  13 +import org.thingsboard.server.common.data.yunteng.dto.SysLogDTO;
  14 +import org.thingsboard.server.common.data.yunteng.enums.OrderTypeEnum;
  15 +import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
  16 +import org.thingsboard.server.controller.BaseController;
  17 +import org.thingsboard.server.dao.model.ModelConstants;
  18 +import org.thingsboard.server.dao.yunteng.entities.SysLogEntity;
  19 +import org.thingsboard.server.dao.yunteng.service.YtSysLogService;
  20 +
  21 +import static org.thingsboard.server.common.data.yunteng.constant.QueryConstant.*;
  22 +
  23 +@RestController
  24 +@RequestMapping("api/yt/log")
  25 +@Api(tags = {"日志管理"})
  26 +@RequiredArgsConstructor
  27 +public class YtSyslogController extends BaseController {
  28 +
  29 + private final YtSysLogService logService;
  30 +
  31 + @GetMapping("{entityId}")
  32 + @PreAuthorize("@check.checkPermissions({},{})")
  33 + @ApiOperation("详情")
  34 + public SysLogDTO detail(@PathVariable("entityId") String entityId)
  35 + throws ThingsboardException {
  36 + return logService.detail(entityId);
  37 + }
  38 +
  39 + @GetMapping(value = "exception", params = {PAGE_SIZE, PAGE})
  40 + @ApiOperation("异常日志列表")
  41 + @PreAuthorize("@check.checkPermissions({},{})")
  42 + public YtPageData<SysLogDTO> pageExceptions(
  43 + @RequestParam(PAGE_SIZE) int pageSize,
  44 + @RequestParam(PAGE) int page,
  45 + @RequestParam(value = "startTime", required = false) Long startTime,
  46 + @RequestParam(value = "endTime", required = false) Long endTime,
  47 + @RequestParam(value = "actionType", required = false) ActionType actionType,
  48 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  49 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType)
  50 + throws ThingsboardException {
  51 +
  52 +
  53 + if (StringUtils.isEmpty(orderBy)) {
  54 + orderBy = ModelConstants.CREATED_TIME_PROPERTY;
  55 + }
  56 + IPage<SysLogEntity> pageInfrom = logService.getPage(page, pageSize, orderBy, orderType);
  57 + return logService.exceptionPage(pageInfrom, startTime, endTime
  58 + , getCurrentUser().isPtTenantAdmin() ? getCurrentUser().getCurrentTenantId() : null
  59 + , getCurrentUser().isCustomerUser() ? getCurrentUser().getCurrentUserId() : null
  60 + , actionType);
  61 + }
  62 +
  63 + @GetMapping(value = "operate", params = {PAGE_SIZE, PAGE})
  64 + @ApiOperation("操作日志列表")
  65 + @PreAuthorize("@check.checkPermissions({},{})")
  66 + public YtPageData<SysLogDTO> pageOperate(
  67 + @RequestParam(PAGE_SIZE) int pageSize,
  68 + @RequestParam(PAGE) int page,
  69 + @RequestParam(value = "startTime", required = false) Long startTime,
  70 + @RequestParam(value = "endTime", required = false) Long endTime,
  71 + @RequestParam(value = "entityType", required = false) EntityType entityType,
  72 + @RequestParam(value = "actionType", required = false) ActionType actionType,
  73 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  74 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType)
  75 + throws ThingsboardException {
  76 + if (StringUtils.isEmpty(orderBy)) {
  77 + orderBy = ModelConstants.CREATED_TIME_PROPERTY;
  78 + }
  79 + IPage<SysLogEntity> pageInfrom = logService.getPage(page, pageSize, orderBy, orderType);
  80 + return logService.operatePage(pageInfrom, startTime, endTime
  81 + , getCurrentUser().isPtTenantAdmin() ? getCurrentUser().getCurrentTenantId() : null
  82 + , getCurrentUser().isCustomerUser() ? getCurrentUser().getCurrentUserId() : null
  83 + , entityType, actionType);
  84 + }
  85 +
  86 + @GetMapping(value = "user", params = {PAGE_SIZE, PAGE})
  87 + @ApiOperation("登录登出列表")
  88 + @PreAuthorize("@check.checkPermissions({},{})")
  89 + public YtPageData<SysLogDTO> pageLogin(
  90 + @RequestParam(PAGE_SIZE) int pageSize,
  91 + @RequestParam(PAGE) int page,
  92 + @RequestParam(value = "startTime", required = false) Long startTime,
  93 + @RequestParam(value = "endTime", required = false) Long endTime,
  94 + @RequestParam(value = "actionType", required = false) ActionType actionType,
  95 + @RequestParam(value = ORDER_FILED, required = false) String orderBy,
  96 + @RequestParam(value = ORDER_TYPE, required = false) OrderTypeEnum orderType)
  97 + throws ThingsboardException {
  98 +
  99 +
  100 + if (StringUtils.isEmpty(orderBy)) {
  101 + orderBy = ModelConstants.CREATED_TIME_PROPERTY;
  102 + }
  103 + IPage<SysLogEntity> pageInfrom = logService.getPage(page, pageSize, orderBy, orderType);
  104 + return logService.loginPage(pageInfrom, startTime, endTime
  105 + , getCurrentUser().isPtTenantAdmin() ? getCurrentUser().getCurrentTenantId() : null
  106 + , getCurrentUser().isCustomerUser() ? getCurrentUser().getCurrentUserId() : null
  107 + , actionType);
  108 + }
  109 +
  110 +
  111 +}
... ...
... ... @@ -150,7 +150,7 @@ public class OperateLogAspect {
150 150 if (authentication != null && authentication.getPrincipal() instanceof SecurityUser) {
151 151 return (SecurityUser) authentication.getPrincipal();
152 152 } else {
153   - throw new ThingsboardException("You aren't authorized to perform this operation!", ThingsboardErrorCode.AUTHENTICATION);
  153 + throw new ThingsboardException("你没有权限执行该操作!", ThingsboardErrorCode.AUTHENTICATION);
154 154 }
155 155 }
156 156
... ...
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + * <p>
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + * <p>
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + * <p>
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.common.data.yunteng.dto;
  17 +
  18 +
  19 +import com.fasterxml.jackson.databind.JsonNode;
  20 +import io.swagger.annotations.ApiModelProperty;
  21 +import lombok.Data;
  22 +import lombok.EqualsAndHashCode;
  23 +import org.thingsboard.server.common.data.EntityType;
  24 +import org.thingsboard.server.common.data.audit.ActionStatus;
  25 +import org.thingsboard.server.common.data.audit.ActionType;
  26 +
  27 +import java.util.UUID;
  28 +
  29 +
  30 +@EqualsAndHashCode(callSuper = true)
  31 +@Data
  32 +public class SysLogDTO extends BaseDTO {
  33 +
  34 + @ApiModelProperty(value = "操作时间")
  35 + private long createdTime;
  36 +
  37 +
  38 + private UUID tenantId;
  39 + @ApiModelProperty(value = "租户名称")
  40 + private String tenantName;
  41 +
  42 + private UUID customerId;
  43 + @ApiModelProperty(value = "客户名称")
  44 + private String customerName;
  45 +
  46 + @ApiModelProperty(value = "资源类型")
  47 + private EntityType entityType;
  48 + private UUID entityId;
  49 + @ApiModelProperty(value = "资源名称")
  50 + private String entityName;
  51 +
  52 + private UUID userId;
  53 + @ApiModelProperty(value = "操作人员")
  54 + private String userName;
  55 +
  56 + @ApiModelProperty(value = "操作类型")
  57 + private ActionType actionType;
  58 +
  59 + @ApiModelProperty(value = "操作数据")
  60 + private JsonNode actionData;
  61 +
  62 + @ApiModelProperty(value = "操作状态")
  63 + private ActionStatus actionStatus;
  64 +
  65 + @ApiModelProperty(value = "失败信息")
  66 + private String actionFailureDetails;
  67 +
  68 +
  69 +}
... ...
... ... @@ -4,5 +4,6 @@ package org.thingsboard.server.common.data.yunteng.enums;
4 4 public enum ActTypeEnum {
5 5 FLASH,
6 6 ROTATE,
7   - DISPLAY
  7 + DISPLAY,
  8 + IMAGE
8 9 }
... ...
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.dao.yunteng.entities;
  17 +
  18 +import com.baomidou.mybatisplus.annotation.TableField;
  19 +import com.baomidou.mybatisplus.annotation.TableName;
  20 +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
  21 +import com.fasterxml.jackson.databind.JsonNode;
  22 +import lombok.Data;
  23 +import lombok.EqualsAndHashCode;
  24 +import org.hibernate.annotations.Type;
  25 +import org.hibernate.annotations.TypeDef;
  26 +import org.thingsboard.server.common.data.EntityType;
  27 +import org.thingsboard.server.common.data.audit.ActionStatus;
  28 +import org.thingsboard.server.common.data.audit.ActionType;
  29 +import org.thingsboard.server.common.data.audit.AuditLog;
  30 +import org.thingsboard.server.common.data.id.*;
  31 +import org.thingsboard.server.common.data.yunteng.dto.TenantDTO;
  32 +import org.thingsboard.server.dao.model.BaseSqlEntity;
  33 +import org.thingsboard.server.dao.model.ModelConstants;
  34 +import org.thingsboard.server.dao.util.mapping.JsonStringType;
  35 +
  36 +import javax.persistence.*;
  37 +import java.util.UUID;
  38 +
  39 +import static org.thingsboard.server.dao.model.ModelConstants.*;
  40 +
  41 +@Data
  42 +@EqualsAndHashCode(callSuper = true)
  43 +@TableName(ModelConstants.AUDIT_LOG_COLUMN_FAMILY_NAME)
  44 +public class SysLogEntity extends BaseEntity {
  45 +
  46 +
  47 + private UUID tenantId;
  48 +
  49 + private long createdTime;
  50 + private UUID customerId;
  51 +
  52 + private EntityType entityType;
  53 +
  54 +
  55 + private UUID entityId;
  56 +
  57 +
  58 + private String entityName;
  59 +
  60 +
  61 + private UUID userId;
  62 +
  63 + private String userName;
  64 +
  65 +
  66 + private ActionType actionType;
  67 +
  68 + @TableField(typeHandler = JacksonTypeHandler.class)
  69 + private JsonNode actionData;
  70 +
  71 + private ActionStatus actionStatus;
  72 +
  73 +
  74 + private String actionFailureDetails;
  75 +
  76 +
  77 +}
... ...
... ... @@ -71,7 +71,7 @@ public class RoleServiceImpl extends AbstractBaseService<RoleMapper, Role> imple
71 71 baseMapper.selectCount(
72 72 new QueryWrapper<Role>().lambda().ne(Role::getTenantId, tenantId).in(Role::getId, ids));
73 73 if (notTenantMenuCount > 0) {
74   - throw new AccessDeniedException("cannot delete role that not create by you");
  74 + throw new AccessDeniedException("只能删除自己创建的角色");
75 75 }
76 76 // 判断该角色下面是否有用户
77 77 Set<String> userIds = baseMapper.checkRoleUserMappingByRoleIds(ids);
... ...
  1 +package org.thingsboard.server.dao.yunteng.impl;
  2 +
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  4 +import lombok.RequiredArgsConstructor;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Service;
  7 +import org.thingsboard.server.common.data.EntityType;
  8 +import org.thingsboard.server.common.data.audit.ActionType;
  9 +import org.thingsboard.server.common.data.yunteng.dto.SysLogDTO;
  10 +import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
  11 +import org.thingsboard.server.dao.yunteng.entities.SysLogEntity;
  12 +import org.thingsboard.server.dao.yunteng.mapper.YtSysLogMapper;
  13 +import org.thingsboard.server.dao.yunteng.service.AbstractBaseService;
  14 +import org.thingsboard.server.dao.yunteng.service.YtSysLogService;
  15 +
  16 +import java.util.ArrayList;
  17 +import java.util.List;
  18 +
  19 +@Slf4j
  20 +@Service
  21 +@RequiredArgsConstructor
  22 +public class YtSysLogServiceImpl extends AbstractBaseService<YtSysLogMapper, SysLogEntity>
  23 + implements YtSysLogService {
  24 +
  25 +
  26 + @Override
  27 + public SysLogDTO detail(String entityId) {
  28 + return baseMapper.detailById(entityId);
  29 + }
  30 +
  31 + @Override
  32 + public YtPageData<SysLogDTO> exceptionPage(IPage<SysLogEntity> pageInfrom, Long startTime, Long endTime, String tenantId, String customerId, ActionType actionType) {
  33 + IPage<SysLogDTO> page =
  34 + baseMapper.getPageDatasMatched(pageInfrom, tenantId, customerId, startTime, endTime, EntityType.RUNNING_EXCEPTION, actionType);
  35 + return getPageData(page, SysLogDTO.class);
  36 + }
  37 +
  38 +
  39 + @Override
  40 + public YtPageData<SysLogDTO> operatePage(IPage<SysLogEntity> pageInfrom, Long startTime, Long endTime, String tenantId, String customerId, EntityType entityType, ActionType actionType) {
  41 + List<EntityType> entityTypes = new ArrayList<>();
  42 + entityTypes.add(EntityType.RUNNING_EXCEPTION);
  43 + entityTypes.add(EntityType.USER);
  44 +
  45 + IPage<SysLogDTO> page =
  46 + baseMapper.getPageDatasNot(pageInfrom, tenantId, customerId, startTime, endTime, entityType, actionType, entityTypes);
  47 + return getPageData(page, SysLogDTO.class);
  48 + }
  49 +
  50 + @Override
  51 + public YtPageData<SysLogDTO> loginPage(IPage<SysLogEntity> pageInfrom, Long startTime, Long endTime, String tenantId, String customerId, ActionType actionType) {
  52 + IPage<SysLogDTO> page =
  53 + baseMapper.getPageDatasMatched(pageInfrom, tenantId, customerId, startTime, endTime, EntityType.USER, actionType);
  54 + return getPageData(page, SysLogDTO.class);
  55 + }
  56 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.mapper;
  2 +
  3 +import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  4 +import com.baomidou.mybatisplus.core.metadata.IPage;
  5 +import org.apache.ibatis.annotations.Mapper;
  6 +import org.apache.ibatis.annotations.Param;
  7 +import org.thingsboard.server.common.data.EntityType;
  8 +import org.thingsboard.server.common.data.audit.ActionType;
  9 +import org.thingsboard.server.common.data.yunteng.dto.SysLogDTO;
  10 +import org.thingsboard.server.dao.yunteng.entities.SysLogEntity;
  11 +
  12 +import java.util.List;
  13 +
  14 +/**
  15 + * @author Administrator
  16 + */
  17 +@Mapper
  18 +public interface YtSysLogMapper extends BaseMapper<SysLogEntity> {
  19 + IPage<SysLogDTO> getPageDatasMatched(IPage<?> page, @Param("tenantId") String tenantId, @Param("customerId") String customerId
  20 + , @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("entityType") EntityType entityType, @Param("actionType") ActionType actionType);
  21 +
  22 + IPage<SysLogDTO> getPageDatasNot(IPage<?> page, @Param("tenantId") String tenantId, @Param("customerId") String customerId
  23 + , @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("entityFilter") EntityType entityFilter, @Param("actionType") ActionType actionType, @Param("entityType") List<EntityType> entityType);
  24 +
  25 +
  26 + SysLogDTO detailById(@Param("entityId") String entityId);
  27 +}
... ...
  1 +package org.thingsboard.server.dao.yunteng.service;
  2 +
  3 +import com.baomidou.mybatisplus.core.metadata.IPage;
  4 +import org.thingsboard.server.common.data.EntityType;
  5 +import org.thingsboard.server.common.data.audit.ActionType;
  6 +import org.thingsboard.server.common.data.yunteng.dto.SysLogDTO;
  7 +import org.thingsboard.server.common.data.yunteng.utils.tools.YtPageData;
  8 +import org.thingsboard.server.dao.yunteng.entities.SysLogEntity;
  9 +
  10 +public interface YtSysLogService extends BaseService<SysLogEntity> {
  11 +
  12 +
  13 + /**
  14 + * 日志详细信息
  15 + *
  16 + * @param entityId 日志ID
  17 + * @return
  18 + */
  19 + SysLogDTO detail(String entityId);
  20 +
  21 + /**
  22 + * 异常日志列表
  23 + *
  24 + * @param pageInfrom 分页配置信息
  25 + * @param startTime 时间过滤窗口起点
  26 + * @param endTime 时间过滤窗口终点
  27 + * @param tenantId 租户ID,超级管理员该值为null
  28 + * @param customerId 客户ID,租户管理员该值为null
  29 + * @param actionType 日志类型
  30 + * @return
  31 + */
  32 + YtPageData<SysLogDTO> exceptionPage(IPage<SysLogEntity> pageInfrom, Long startTime, Long endTime, String tenantId, String customerId, ActionType actionType);
  33 +
  34 + /**
  35 + * 操作日志列表
  36 + *
  37 + * @param pageInfrom 分页配置信息
  38 + * @param startTime 时间过滤窗口起点
  39 + * @param endTime 时间过滤窗口终点
  40 + * @param tenantId 租户ID,超级管理员该值为null
  41 + * @param customerId 客户ID,租户管理员该值为null
  42 + * @param actionType 日志类型
  43 + * @return
  44 + */
  45 + YtPageData<SysLogDTO> operatePage(IPage<SysLogEntity> pageInfrom, Long startTime, Long endTime, String tenantId, String customerId, EntityType entityType, ActionType actionType);
  46 +
  47 + /**
  48 + * 登录日志列表
  49 + *
  50 + * @param pageInfrom 分页配置信息
  51 + * @param startTime 时间过滤窗口起点
  52 + * @param endTime 时间过滤窗口终点
  53 + * @param tenantId 租户ID,超级管理员该值为null
  54 + * @param customerId 客户ID,租户管理员该值为null
  55 + * @param actionType 日志类型
  56 + * @return
  57 + */
  58 + YtPageData<SysLogDTO> loginPage(IPage<SysLogEntity> pageInfrom, Long startTime, Long endTime, String tenantId, String customerId, ActionType actionType);
  59 +
  60 +}
... ...
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +
  4 +<mapper namespace="org.thingsboard.server.dao.yunteng.mapper.YtSysLogMapper">
  5 + <resultMap id="logDto" type="org.thingsboard.server.common.data.yunteng.dto.SysLogDTO">
  6 + <result property="id" column="id"/>
  7 + <result property="entityType" column="entity_type" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  8 +
  9 + <result property="entityId" column="entity_id" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>
  10 + <result property="entityName" column="entity_name" />
  11 + <result property="tenantId" column="tenant_id" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>
  12 + <result property="tenantName" column="tenant_name"/>
  13 + <result property="customerId" column="customer_id" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>
  14 + <result property="customerName" column="customer_name"/>
  15 + <result property="userId" column="user_id" typeHandler="org.thingsboard.server.dao.yunteng.mapper.UUIDTypeHandler"/>
  16 + <result property="userName" column="user_name" />
  17 +
  18 + <result property="actionData" column="action_data" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
  19 + <result property="actionType" column="action_type" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  20 + <result property="actionStatus" column="action_status" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
  21 + <result property="actionFailureDetails" column="action_failure_details"/>
  22 + <result property="createdTime" column="created_time"/>
  23 +
  24 + </resultMap>
  25 +
  26 + <sql id="baseColumn">
  27 + base.id, base.tenant_id, base.created_time, base.customer_id, base.entity_type, base.entity_id, base.entity_name, base.user_id, base.user_name, base.action_type, base.action_status
  28 + ,ten.title tenant_name,cus.title customer_name
  29 + </sql>
  30 + <sql id="detailColumn">
  31 + <include refid="baseColumn"></include>
  32 + , base.action_data,base.action_failure_details
  33 + </sql>
  34 +
  35 + <select id="getPageDatasMatched" resultMap="logDto">
  36 + SELECT <include refid="baseColumn"/>
  37 + FROM audit_log base
  38 + LEFT JOIN tenant ten ON base.tenant_id = ten.id
  39 + LEFT JOIN customer cus ON base.customer_id = cus.id
  40 + <where>
  41 + base.entity_type = #{entityType}
  42 + <if test="tenantId !=null and tenantId !=''">
  43 + AND base.tenant_id = #{tenantId}::uuid
  44 + </if>
  45 + <if test="customerId !=null ">
  46 + AND base.customer_id = #{customerId}::uuid
  47 + </if>
  48 + <if test="startTime !=null">
  49 + AND base.created_time >= #{startTime}
  50 + </if>
  51 + <if test="endTime !=null">
  52 + AND base.created_time &lt; #{endTime}
  53 + </if>
  54 + <if test="actionType !=null">
  55 + AND base.action_type = #{actionType}
  56 + </if>
  57 + </where>
  58 + </select>
  59 +
  60 +
  61 + <select id="getPageDatasNot" resultMap="logDto">
  62 + SELECT <include refid="baseColumn"/>
  63 + FROM audit_log base
  64 + LEFT JOIN tenant ten ON base.tenant_id = ten.id
  65 + LEFT JOIN customer cus ON base.customer_id = cus.id
  66 + <where>
  67 + base.entity_type
  68 + NOT IN
  69 + <foreach collection="entityType" item="item" open="(" separator="," close=")">
  70 + #{item}
  71 + </foreach>
  72 + <if test="entityFilter !=null">
  73 + AND base.entity_type = #{entityFilter}
  74 + </if>
  75 + <if test="tenantId !=null and tenantId !=''">
  76 + AND base.tenant_id = #{tenantId}::uuid
  77 + </if>
  78 + <if test="customerId !=null ">
  79 + AND base.customer_id = #{customerId}::uuid
  80 + </if>
  81 + <if test="startTime !=null">
  82 + AND base.created_time >= #{startTime}
  83 + </if>
  84 + <if test="endTime !=null">
  85 + AND base.created_time &lt; #{endTime}
  86 + </if>
  87 + <if test="actionType !=null">
  88 + AND base.action_type = #{actionType}
  89 + </if>
  90 + </where>
  91 + </select>
  92 +
  93 + <select id="detailById" resultMap="logDto">
  94 + SELECT <include refid="detailColumn"/>
  95 + FROM audit_log base
  96 + LEFT JOIN tenant ten ON base.tenant_id = ten.id
  97 + LEFT JOIN customer cus ON base.customer_id = cus.id
  98 + <where>
  99 + base.id = #{entityId}::uuid
  100 +
  101 + </where>
  102 + </select>
  103 +
  104 +</mapper>
... ...