From 73f349f36895142b994429de5e35391b7ee77aa3 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Wed, 1 May 2024 17:33:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AE=BE=E5=A4=87=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coal/device/service/DeviceService.java | 30 +++++++++++++- .../dto/CreateDeviceCategoryDto.java | 3 ++ .../deviceCategory/dto/DeviceCategoryDto.java | 2 + .../dto/DeviceCategoryTreeDto.java | 2 + .../dto/UpdateDeviceCategoryDto.java | 3 ++ .../entity/DeviceCategoryEntity.java | 3 ++ .../service/DeviceCategoryService.java | 41 +++++++++++++------ .../service/WeightDeviceDataService.java | 1 + 8 files changed, 71 insertions(+), 14 deletions(-) diff --git a/src/main/java/cn/lihongjie/coal/device/service/DeviceService.java b/src/main/java/cn/lihongjie/coal/device/service/DeviceService.java index 95f37be3..807f44db 100644 --- a/src/main/java/cn/lihongjie/coal/device/service/DeviceService.java +++ b/src/main/java/cn/lihongjie/coal/device/service/DeviceService.java @@ -3,6 +3,7 @@ package cn.lihongjie.coal.device.service; import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.base.service.BaseService; +import cn.lihongjie.coal.common.Ctx; import cn.lihongjie.coal.device.dto.CreateDeviceDto; import cn.lihongjie.coal.device.dto.DeviceDto; import cn.lihongjie.coal.device.dto.UpdateDeviceDto; @@ -11,13 +12,18 @@ import cn.lihongjie.coal.device.mapper.DeviceMapper; import cn.lihongjie.coal.device.repository.DeviceRepository; import cn.lihongjie.coal.exception.BizException; +import jakarta.persistence.criteria.Join; +import jakarta.persistence.criteria.JoinType; + import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.convert.ConversionService; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -69,9 +75,31 @@ public class DeviceService extends BaseService { } public Page list(CommonQuery query) { + + Specification specification = query.specification(conversionService); + + if (!BooleanUtils.isTrue(Ctx.currentUser().getOrgAdmin())) { + + // + specification = + specification.and( + (root, query1, cb) -> { + query1.distinct(true); + Join category = root.join("category", JoinType.LEFT); + Join caUsers = category.join("users", JoinType.LEFT); + return cb.or( + // 没有绑定类目的设备 + cb.isNull(category.get("id")), + // 类目没有配置管理员的设备 + cb.isNull(caUsers.get("id")), + // 当前用户是类目管理员的设备 + cb.equal(caUsers.get("id"), Ctx.currentUser().getId())); + }); + } + Page page = repository.findAll( - query.specification(conversionService), + specification, PageRequest.of( query.getPageNo(), query.getPageSize(), diff --git a/src/main/java/cn/lihongjie/coal/deviceCategory/dto/CreateDeviceCategoryDto.java b/src/main/java/cn/lihongjie/coal/deviceCategory/dto/CreateDeviceCategoryDto.java index 160690e0..4df0995e 100644 --- a/src/main/java/cn/lihongjie/coal/deviceCategory/dto/CreateDeviceCategoryDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceCategory/dto/CreateDeviceCategoryDto.java @@ -4,7 +4,10 @@ import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; +import java.util.List; + @Data public class CreateDeviceCategoryDto extends OrgCommonDto { private String parent; + private List users; } diff --git a/src/main/java/cn/lihongjie/coal/deviceCategory/dto/DeviceCategoryDto.java b/src/main/java/cn/lihongjie/coal/deviceCategory/dto/DeviceCategoryDto.java index 430c9ee3..01906c96 100644 --- a/src/main/java/cn/lihongjie/coal/deviceCategory/dto/DeviceCategoryDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceCategory/dto/DeviceCategoryDto.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.deviceCategory.dto; import cn.lihongjie.coal.base.dto.OrgCommonDto; +import cn.lihongjie.coal.base.dto.SimpleDto; import lombok.Data; @@ -9,6 +10,7 @@ import java.util.List; @Data public class DeviceCategoryDto extends OrgCommonDto { private String parent; + private List user; private List allDeviceIds; private List childrenDeviceIds; diff --git a/src/main/java/cn/lihongjie/coal/deviceCategory/dto/DeviceCategoryTreeDto.java b/src/main/java/cn/lihongjie/coal/deviceCategory/dto/DeviceCategoryTreeDto.java index ee358a9f..6a7e217e 100644 --- a/src/main/java/cn/lihongjie/coal/deviceCategory/dto/DeviceCategoryTreeDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceCategory/dto/DeviceCategoryTreeDto.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.deviceCategory.dto; import cn.lihongjie.coal.base.dto.OrgCommonDto; +import cn.lihongjie.coal.base.dto.SimpleDto; import lombok.Data; @@ -9,6 +10,7 @@ import java.util.List; @Data public class DeviceCategoryTreeDto extends OrgCommonDto { + private List user; private List allDeviceIds; private List childrenDeviceIds; diff --git a/src/main/java/cn/lihongjie/coal/deviceCategory/dto/UpdateDeviceCategoryDto.java b/src/main/java/cn/lihongjie/coal/deviceCategory/dto/UpdateDeviceCategoryDto.java index 09f29f20..d91ba07b 100644 --- a/src/main/java/cn/lihongjie/coal/deviceCategory/dto/UpdateDeviceCategoryDto.java +++ b/src/main/java/cn/lihongjie/coal/deviceCategory/dto/UpdateDeviceCategoryDto.java @@ -4,7 +4,10 @@ import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; +import java.util.List; + @Data public class UpdateDeviceCategoryDto extends OrgCommonDto { private String parent; + private List users; } diff --git a/src/main/java/cn/lihongjie/coal/deviceCategory/entity/DeviceCategoryEntity.java b/src/main/java/cn/lihongjie/coal/deviceCategory/entity/DeviceCategoryEntity.java index 9d10838e..4ad0f690 100644 --- a/src/main/java/cn/lihongjie/coal/deviceCategory/entity/DeviceCategoryEntity.java +++ b/src/main/java/cn/lihongjie/coal/deviceCategory/entity/DeviceCategoryEntity.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.deviceCategory.entity; import cn.lihongjie.coal.base.entity.OrgCommonEntity; +import cn.lihongjie.coal.user.entity.UserEntity; import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; @@ -16,6 +17,8 @@ import java.util.List; public class DeviceCategoryEntity extends OrgCommonEntity { + @OneToMany + private List users; @ManyToOne private DeviceCategoryEntity parent; diff --git a/src/main/java/cn/lihongjie/coal/deviceCategory/service/DeviceCategoryService.java b/src/main/java/cn/lihongjie/coal/deviceCategory/service/DeviceCategoryService.java index 485c0e23..d2fcc211 100644 --- a/src/main/java/cn/lihongjie/coal/deviceCategory/service/DeviceCategoryService.java +++ b/src/main/java/cn/lihongjie/coal/deviceCategory/service/DeviceCategoryService.java @@ -24,6 +24,7 @@ import org.springframework.core.convert.ConversionService; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -77,9 +78,24 @@ public class DeviceCategoryService } public Page list(CommonQuery query) { + Specification specification = query.specification(conversionService); + +// if (!BooleanUtils.isTrue(Ctx.currentUser().getOrgAdmin())) { +// +// // +// specification = +// specification.and( +// (root, query1, cb) -> { +// Join users = root.join("users", JoinType.LEFT); +// return cb.or( +// cb.isNull(users.get("id")), +// cb.equal(users.get("id"), Ctx.currentUser().getId())); +// }); +// } + Page page = repository.findAll( - query.specification(conversionService), + specification, PageRequest.of( query.getPageNo(), query.getPageSize(), @@ -95,13 +111,12 @@ public class DeviceCategoryService this.repository.findAll( (root, query, criteriaBuilder) -> criteriaBuilder.isNull(root.get("parent"))); - List collect = roots.stream() - .map(de -> this.mapper.toTreeDto(de)) - .collect(Collectors.toList()); + List collect = + roots.stream() + .map(de -> this.mapper.toTreeDto(de)) + .collect(Collectors.toList()); - - return addDeviceIds( - collect); + return addDeviceIds(collect); } else { Page page = repository.findAll( @@ -118,9 +133,10 @@ public class DeviceCategoryService true); List selfAndParent = - addDeviceIds(this.findAllByIds(selfAndParentIds).stream() - .map(x -> (this.mapper.toTreeDtoExcludeChildren(x))) - .collect(Collectors.toList())); + addDeviceIds( + this.findAllByIds(selfAndParentIds).stream() + .map(x -> (this.mapper.toTreeDtoExcludeChildren(x))) + .collect(Collectors.toList())); return (StreamSupport.stream( TreeUtils.buildTreeFromList( @@ -142,12 +158,11 @@ public class DeviceCategoryService private List addDeviceIds(List collect) { - - var dtos = TreeUtils.treeToList(collect); + var dtos = TreeUtils.treeToList(collect); var maps = repository.deviceIds(ReflectUtils.idList(dtos)); - JpaUtils.mergeMapToPojo (dtos, maps, conversionService); + JpaUtils.mergeMapToPojo(dtos, maps, conversionService); return collect; } diff --git a/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java b/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java index f5bb64fa..b013586a 100644 --- a/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java +++ b/src/main/java/cn/lihongjie/coal/weightDeviceData/service/WeightDeviceDataService.java @@ -195,6 +195,7 @@ public class WeightDeviceDataService + groupSql + ",\n" + fieldSql + + ", array_agg(d.id) as ids\n" + "\n from t_weight_device_data d\n" + " " + where