|
|
|
@ -19,13 +19,8 @@ import com.google.common.util.concurrent.ListenableFuture; |
|
|
|
import com.google.common.util.concurrent.ListeningExecutorService; |
|
|
|
import com.google.common.util.concurrent.MoreExecutors; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.data.domain.PageRequest; |
|
|
|
import org.springframework.data.domain.Pageable; |
|
|
|
import org.springframework.data.domain.Sort; |
|
|
|
import org.springframework.data.jpa.domain.Specification; |
|
|
|
import org.springframework.data.repository.CrudRepository; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
import org.thingsboard.server.common.data.UUIDConverter; |
|
|
|
import org.thingsboard.server.common.data.audit.AuditLog; |
|
|
|
import org.thingsboard.server.common.data.id.CustomerId; |
|
|
|
import org.thingsboard.server.common.data.id.EntityId; |
|
|
|
@ -36,18 +31,16 @@ import org.thingsboard.server.dao.DaoUtil; |
|
|
|
import org.thingsboard.server.dao.audit.AuditLogDao; |
|
|
|
import org.thingsboard.server.dao.model.sql.AuditLogEntity; |
|
|
|
import org.thingsboard.server.dao.sql.JpaAbstractDao; |
|
|
|
import org.thingsboard.server.dao.sql.JpaAbstractSearchTimeDao; |
|
|
|
import org.thingsboard.server.dao.util.SqlDao; |
|
|
|
|
|
|
|
import javax.annotation.PreDestroy; |
|
|
|
import javax.persistence.criteria.Predicate; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Objects; |
|
|
|
import java.util.UUID; |
|
|
|
import java.util.concurrent.Executors; |
|
|
|
|
|
|
|
import static org.springframework.data.jpa.domain.Specifications.where; |
|
|
|
import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY; |
|
|
|
import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID; |
|
|
|
import static org.thingsboard.server.dao.DaoUtil.endTimeToId; |
|
|
|
import static org.thingsboard.server.dao.DaoUtil.startTimeToId; |
|
|
|
|
|
|
|
@Component |
|
|
|
@SqlDao |
|
|
|
@ -83,53 +76,52 @@ public class JpaAuditLogDao extends JpaAbstractDao<AuditLogEntity, AuditLog> imp |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageData<AuditLog> findAuditLogsByTenantIdAndEntityId(UUID tenantId, EntityId entityId, TimePageLink pageLink) { |
|
|
|
return findAuditLogs(tenantId, entityId, null, null, pageLink); |
|
|
|
return DaoUtil.toPageData( |
|
|
|
auditLogRepository |
|
|
|
.findAuditLogsByTenantIdAndEntityId( |
|
|
|
fromTimeUUID(tenantId), |
|
|
|
entityId.getEntityType(), |
|
|
|
fromTimeUUID(entityId.getId()), |
|
|
|
Objects.toString(pageLink.getTextSearch(), ""), |
|
|
|
startTimeToId(pageLink.getStartTime()), |
|
|
|
endTimeToId(pageLink.getEndTime()), |
|
|
|
DaoUtil.toPageable(pageLink))); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageData<AuditLog> findAuditLogsByTenantIdAndCustomerId(UUID tenantId, CustomerId customerId, TimePageLink pageLink) { |
|
|
|
return findAuditLogs(tenantId, null, customerId, null, pageLink); |
|
|
|
return DaoUtil.toPageData( |
|
|
|
auditLogRepository |
|
|
|
.findAuditLogsByTenantIdAndCustomerId( |
|
|
|
fromTimeUUID(tenantId), |
|
|
|
fromTimeUUID(customerId.getId()), |
|
|
|
Objects.toString(pageLink.getTextSearch(), ""), |
|
|
|
startTimeToId(pageLink.getStartTime()), |
|
|
|
endTimeToId(pageLink.getEndTime()), |
|
|
|
DaoUtil.toPageable(pageLink))); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageData<AuditLog> findAuditLogsByTenantIdAndUserId(UUID tenantId, UserId userId, TimePageLink pageLink) { |
|
|
|
return findAuditLogs(tenantId, null, null, userId, pageLink); |
|
|
|
return DaoUtil.toPageData( |
|
|
|
auditLogRepository |
|
|
|
.findAuditLogsByTenantIdAndUserId( |
|
|
|
fromTimeUUID(tenantId), |
|
|
|
fromTimeUUID(userId.getId()), |
|
|
|
Objects.toString(pageLink.getTextSearch(), ""), |
|
|
|
startTimeToId(pageLink.getStartTime()), |
|
|
|
endTimeToId(pageLink.getEndTime()), |
|
|
|
DaoUtil.toPageable(pageLink))); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageData<AuditLog> findAuditLogsByTenantId(UUID tenantId, TimePageLink pageLink) { |
|
|
|
return findAuditLogs(tenantId, null, null, null, pageLink); |
|
|
|
} |
|
|
|
|
|
|
|
private PageData<AuditLog> findAuditLogs(UUID tenantId, EntityId entityId, CustomerId customerId, UserId userId, TimePageLink pageLink) { |
|
|
|
Specification<AuditLogEntity> timeSearchSpec = JpaAbstractSearchTimeDao.getTimeSearchPageSpec(pageLink, "id"); |
|
|
|
Specification<AuditLogEntity> fieldsSpec = getEntityFieldsSpec(tenantId, entityId, customerId, userId); |
|
|
|
Pageable pageable = DaoUtil.toPageable(pageLink); |
|
|
|
return DaoUtil.toPageData(auditLogRepository.findAll(where(timeSearchSpec).and(fieldsSpec), pageable)); |
|
|
|
} |
|
|
|
|
|
|
|
private Specification<AuditLogEntity> getEntityFieldsSpec(UUID tenantId, EntityId entityId, CustomerId customerId, UserId userId) { |
|
|
|
return (root, criteriaQuery, criteriaBuilder) -> { |
|
|
|
List<Predicate> predicates = new ArrayList<>(); |
|
|
|
if (tenantId != null) { |
|
|
|
Predicate tenantIdPredicate = criteriaBuilder.equal(root.get("tenantId"), UUIDConverter.fromTimeUUID(tenantId)); |
|
|
|
predicates.add(tenantIdPredicate); |
|
|
|
} |
|
|
|
if (entityId != null) { |
|
|
|
Predicate entityTypePredicate = criteriaBuilder.equal(root.get("entityType"), entityId.getEntityType()); |
|
|
|
predicates.add(entityTypePredicate); |
|
|
|
Predicate entityIdPredicate = criteriaBuilder.equal(root.get("entityId"), UUIDConverter.fromTimeUUID(entityId.getId())); |
|
|
|
predicates.add(entityIdPredicate); |
|
|
|
} |
|
|
|
if (customerId != null) { |
|
|
|
Predicate tenantIdPredicate = criteriaBuilder.equal(root.get("customerId"), UUIDConverter.fromTimeUUID(customerId.getId())); |
|
|
|
predicates.add(tenantIdPredicate); |
|
|
|
} |
|
|
|
if (userId != null) { |
|
|
|
Predicate tenantIdPredicate = criteriaBuilder.equal(root.get("userId"), UUIDConverter.fromTimeUUID(userId.getId())); |
|
|
|
predicates.add(tenantIdPredicate); |
|
|
|
} |
|
|
|
return criteriaBuilder.and(predicates.toArray(new Predicate[]{})); |
|
|
|
}; |
|
|
|
return DaoUtil.toPageData( |
|
|
|
auditLogRepository.findByTenantId( |
|
|
|
fromTimeUUID(tenantId), |
|
|
|
Objects.toString(pageLink.getTextSearch(), ""), |
|
|
|
startTimeToId(pageLink.getStartTime()), |
|
|
|
endTimeToId(pageLink.getEndTime()), |
|
|
|
DaoUtil.toPageable(pageLink))); |
|
|
|
} |
|
|
|
} |
|
|
|
|