From d3b5df8980125225cbd6c18ecf6162aff144ebaf Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Tue, 23 Apr 2024 17:30:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=95=B0=E6=8D=AE=E5=85=B3?= =?UTF-8?q?=E8=81=94=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/AcDeviceRepository.java | 10 ++++++- .../acDevice/service/AcDeviceService.java | 22 ++------------ .../AcDeviceSupplierRepository.java | 11 ++++++- .../service/AcDeviceSupplierService.java | 12 ++------ .../repository/CoalInfoRepository.java | 10 ++++++- .../coalInfo/service/CoalInfoService.java | 6 ++++ .../repository/DataCollectorRepository.java | 29 +++++++++++++++++++ .../service/DataCollectorService.java | 6 ++++ .../repository/DepartmentRepository.java | 4 +++ .../department/service/DepartmentService.java | 6 ++++ .../device/repository/DeviceRepository.java | 10 ++++++- .../coal/device/service/DeviceService.java | 5 ++++ .../repository/DeviceCategoryRepository.java | 2 ++ .../service/DeviceCategoryService.java | 6 ++++ .../repository/DeviceSupplierRepository.java | 9 +++++- .../service/DeviceSupplierService.java | 5 ++++ .../jobPost/repository/JobPostRepository.java | 3 ++ .../coal/jobPost/service/JobPostService.java | 7 +++++ .../meter/repository/MeterRepository.java | 9 +++++- .../coal/meter/service/MeterService.java | 6 ++++ .../dto/CreateOrganizationDto.java | 3 ++ .../dto/UpdateOrganizationDto.java | 4 +++ .../entity/OrganizationEntity.java | 4 ++- .../repository/PermissionRepository.java | 12 ++++++-- .../permission/service/PermissionService.java | 5 ++++ .../repository/ResourceRepository.java | 8 ++++- .../resource/service/ResourceService.java | 6 ++++ .../coal/role/repository/RoleRepository.java | 5 ++++ .../coal/role/service/RoleService.java | 4 +++ .../repository/WeightDeviceRepository.java | 10 ++++++- .../service/WeightDeviceService.java | 6 ++++ .../WeightDeviceSupplierRepository.java | 10 ++++++- .../service/WeightDeviceSupplierService.java | 5 ++++ 33 files changed, 218 insertions(+), 42 deletions(-) diff --git a/src/main/java/cn/lihongjie/coal/acDevice/repository/AcDeviceRepository.java b/src/main/java/cn/lihongjie/coal/acDevice/repository/AcDeviceRepository.java index e50f1289..f0b217b3 100644 --- a/src/main/java/cn/lihongjie/coal/acDevice/repository/AcDeviceRepository.java +++ b/src/main/java/cn/lihongjie/coal/acDevice/repository/AcDeviceRepository.java @@ -3,7 +3,15 @@ package cn.lihongjie.coal.acDevice.repository; import cn.lihongjie.coal.acDevice.entity.AcDeviceEntity; import cn.lihongjie.coal.base.dao.BaseRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface AcDeviceRepository extends BaseRepository {} +public interface AcDeviceRepository extends BaseRepository { + + @Query("select exists(select 1 from AcDeviceDataEntity e where e.device.id in :ids union all select 1 from AcAppointmentEntity e where e.device.id in :ids) ") + boolean isLinked(@Param("ids") List ids); +} diff --git a/src/main/java/cn/lihongjie/coal/acDevice/service/AcDeviceService.java b/src/main/java/cn/lihongjie/coal/acDevice/service/AcDeviceService.java index dbda60f1..60ee305a 100644 --- a/src/main/java/cn/lihongjie/coal/acDevice/service/AcDeviceService.java +++ b/src/main/java/cn/lihongjie/coal/acDevice/service/AcDeviceService.java @@ -1,6 +1,5 @@ package cn.lihongjie.coal.acDevice.service; -import cn.lihongjie.coal.acAppointment.entity.AcAppointmentEntity; import cn.lihongjie.coal.acAppointment.service.AcAppointmentService; import cn.lihongjie.coal.acDevice.dto.AcDeviceDto; import cn.lihongjie.coal.acDevice.dto.CreateAcDeviceDto; @@ -8,14 +7,12 @@ import cn.lihongjie.coal.acDevice.dto.UpdateAcDeviceDto; import cn.lihongjie.coal.acDevice.entity.AcDeviceEntity; import cn.lihongjie.coal.acDevice.mapper.AcDeviceMapper; import cn.lihongjie.coal.acDevice.repository.AcDeviceRepository; -import cn.lihongjie.coal.acDeviceData.entity.AcDeviceDataEntity; import cn.lihongjie.coal.acDeviceData.service.AcDeviceDataService; 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.dbFunctions.DbFunctionService; import cn.lihongjie.coal.exception.BizException; -import cn.lihongjie.coal.exception.DataLinkedException; import lombok.extern.slf4j.Slf4j; @@ -24,7 +21,6 @@ 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; @@ -68,23 +64,11 @@ public class AcDeviceService extends BaseService) - (root, query, criteriaBuilder) -> - criteriaBuilder.and( - root.get("device").get("id").in(request.getIds()))) - > 0) { - throw new DataLinkedException(); + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); } - if (acAppointmentService.count( - (Specification) - (root, query, criteriaBuilder) -> - criteriaBuilder.and( - root.get("device").get("id").in(request.getIds()))) - > 0) { - throw new DataLinkedException(); - } + diff --git a/src/main/java/cn/lihongjie/coal/acDeviceSupplier/repository/AcDeviceSupplierRepository.java b/src/main/java/cn/lihongjie/coal/acDeviceSupplier/repository/AcDeviceSupplierRepository.java index 21ad5289..1070359d 100644 --- a/src/main/java/cn/lihongjie/coal/acDeviceSupplier/repository/AcDeviceSupplierRepository.java +++ b/src/main/java/cn/lihongjie/coal/acDeviceSupplier/repository/AcDeviceSupplierRepository.java @@ -3,7 +3,16 @@ package cn.lihongjie.coal.acDeviceSupplier.repository; import cn.lihongjie.coal.acDeviceSupplier.entity.AcDeviceSupplierEntity; import cn.lihongjie.coal.base.dao.BaseRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface AcDeviceSupplierRepository extends BaseRepository {} +public interface AcDeviceSupplierRepository extends BaseRepository { + + @Query("select exists(select 1 from AcDeviceEntity e where e.supplier.id in :ids)") + boolean isLinked(@Param("ids") List ids); + +} diff --git a/src/main/java/cn/lihongjie/coal/acDeviceSupplier/service/AcDeviceSupplierService.java b/src/main/java/cn/lihongjie/coal/acDeviceSupplier/service/AcDeviceSupplierService.java index 167fa864..30888883 100644 --- a/src/main/java/cn/lihongjie/coal/acDeviceSupplier/service/AcDeviceSupplierService.java +++ b/src/main/java/cn/lihongjie/coal/acDeviceSupplier/service/AcDeviceSupplierService.java @@ -1,6 +1,5 @@ package cn.lihongjie.coal.acDeviceSupplier.service; -import cn.lihongjie.coal.acDevice.entity.AcDeviceEntity; import cn.lihongjie.coal.acDevice.service.AcDeviceService; import cn.lihongjie.coal.acDeviceSupplier.dto.AcDeviceSupplierDto; import cn.lihongjie.coal.acDeviceSupplier.dto.CreateAcDeviceSupplierDto; @@ -13,7 +12,6 @@ import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.dbFunctions.DbFunctionService; import cn.lihongjie.coal.exception.BizException; -import cn.lihongjie.coal.exception.DataLinkedException; import lombok.extern.slf4j.Slf4j; @@ -22,7 +20,6 @@ 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; @@ -65,13 +62,8 @@ public class AcDeviceSupplierService throw new BizException("部分数据已归档,无法编辑或删除"); } - if (acDeviceService.count( - (Specification) (root, query, criteriaBuilder) -> criteriaBuilder.and( - criteriaBuilder - .in(root.get("supplier").get("id")) - .value(request.getIds()))) - > 0) { - throw new DataLinkedException(); + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); } this.repository.deleteAllById(request.getIds()); diff --git a/src/main/java/cn/lihongjie/coal/coalInfo/repository/CoalInfoRepository.java b/src/main/java/cn/lihongjie/coal/coalInfo/repository/CoalInfoRepository.java index 38b76841..d619a43f 100644 --- a/src/main/java/cn/lihongjie/coal/coalInfo/repository/CoalInfoRepository.java +++ b/src/main/java/cn/lihongjie/coal/coalInfo/repository/CoalInfoRepository.java @@ -3,7 +3,15 @@ package cn.lihongjie.coal.coalInfo.repository; import cn.lihongjie.coal.base.dao.BaseRepository; import cn.lihongjie.coal.coalInfo.entity.CoalInfoEntity; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface CoalInfoRepository extends BaseRepository {} +public interface CoalInfoRepository extends BaseRepository { + + @Query("select exists(select 1 from CoalAnalysisEntity e where e.coalInfo.id in :ids)") + boolean isLinked(@Param("ids") List ids); +} diff --git a/src/main/java/cn/lihongjie/coal/coalInfo/service/CoalInfoService.java b/src/main/java/cn/lihongjie/coal/coalInfo/service/CoalInfoService.java index c74783bb..48184c74 100644 --- a/src/main/java/cn/lihongjie/coal/coalInfo/service/CoalInfoService.java +++ b/src/main/java/cn/lihongjie/coal/coalInfo/service/CoalInfoService.java @@ -11,6 +11,7 @@ import cn.lihongjie.coal.coalInfo.mapper.CoalInfoMapper; import cn.lihongjie.coal.coalInfo.repository.CoalInfoRepository; import cn.lihongjie.coal.coalPrice.entity.CoalPriceEntity; import cn.lihongjie.coal.coalPrice.service.CoalPriceService; +import cn.lihongjie.coal.exception.BizException; import lombok.extern.slf4j.Slf4j; @@ -65,6 +66,11 @@ class CoalInfoService extends BaseService { } public void delete(IdRequest request) { + + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); + } + this.repository.deleteAllById(request.getIds()); } diff --git a/src/main/java/cn/lihongjie/coal/dataCollector/repository/DataCollectorRepository.java b/src/main/java/cn/lihongjie/coal/dataCollector/repository/DataCollectorRepository.java index 8f4339c7..7bb69fb2 100644 --- a/src/main/java/cn/lihongjie/coal/dataCollector/repository/DataCollectorRepository.java +++ b/src/main/java/cn/lihongjie/coal/dataCollector/repository/DataCollectorRepository.java @@ -3,9 +3,38 @@ package cn.lihongjie.coal.dataCollector.repository; import cn.lihongjie.coal.base.dao.BaseRepository; import cn.lihongjie.coal.dataCollector.entity.DataCollectorEntity; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface DataCollectorRepository extends BaseRepository { DataCollectorEntity findByAppKey(String appKey); + + @Query(""" + select exists( + + + select 1 from AcDeviceEntity e where e.dataCollector.id in :ids + + union all + + select 1 from WeightDeviceEntity e where e.dataCollector.id in :ids + + union all + + select 1 from PdcDeviceEntity e where e.dataCollector.id in :ids + + + + ) + + + + + + """) + boolean isLinked(@Param("ids") List ids); } diff --git a/src/main/java/cn/lihongjie/coal/dataCollector/service/DataCollectorService.java b/src/main/java/cn/lihongjie/coal/dataCollector/service/DataCollectorService.java index d2cad16b..829d75b3 100644 --- a/src/main/java/cn/lihongjie/coal/dataCollector/service/DataCollectorService.java +++ b/src/main/java/cn/lihongjie/coal/dataCollector/service/DataCollectorService.java @@ -10,6 +10,7 @@ import cn.lihongjie.coal.dataCollector.entity.DataCollectorEntity; import cn.lihongjie.coal.dataCollector.mapper.DataCollectorMapper; import cn.lihongjie.coal.dataCollector.repository.DataCollectorRepository; import cn.lihongjie.coal.dbFunctions.DbFunctionService; +import cn.lihongjie.coal.exception.BizException; import jakarta.annotation.PostConstruct; @@ -134,6 +135,11 @@ public class DataCollectorService } public void delete(IdRequest request) { + + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); + } + this.repository.deleteAllById(request.getIds()); } diff --git a/src/main/java/cn/lihongjie/coal/department/repository/DepartmentRepository.java b/src/main/java/cn/lihongjie/coal/department/repository/DepartmentRepository.java index d45cded3..39d089b3 100644 --- a/src/main/java/cn/lihongjie/coal/department/repository/DepartmentRepository.java +++ b/src/main/java/cn/lihongjie/coal/department/repository/DepartmentRepository.java @@ -29,4 +29,8 @@ public interface DepartmentRepository extends BaseRepository { """, nativeQuery = true) List empIds(@Param("ids") List ids); + + @Query("select exists(select 1 from EmployeeEntity e where e.department.id in :ids)") + boolean isLinked(@Param("ids") List ids); + } diff --git a/src/main/java/cn/lihongjie/coal/department/service/DepartmentService.java b/src/main/java/cn/lihongjie/coal/department/service/DepartmentService.java index 35a415b1..ec19f3ae 100644 --- a/src/main/java/cn/lihongjie/coal/department/service/DepartmentService.java +++ b/src/main/java/cn/lihongjie/coal/department/service/DepartmentService.java @@ -15,6 +15,7 @@ import cn.lihongjie.coal.department.dto.UpdateDepartmentDto; import cn.lihongjie.coal.department.entity.DepartmentEntity; import cn.lihongjie.coal.department.mapper.DepartmentMapper; import cn.lihongjie.coal.department.repository.DepartmentRepository; +import cn.lihongjie.coal.exception.BizException; import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; @@ -69,6 +70,11 @@ class DepartmentService extends BaseService {} +public interface DeviceRepository extends BaseRepository { + + @Query("select exists(select 1 from DeviceWorkOrderEntity e where e.device.id in :ids)") + boolean isLinked(@Param("ids") List ids); +} 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 79b50173..3f469bbb 100644 --- a/src/main/java/cn/lihongjie/coal/device/service/DeviceService.java +++ b/src/main/java/cn/lihongjie/coal/device/service/DeviceService.java @@ -54,6 +54,11 @@ public class DeviceService extends BaseService { if (this.repository.containArchived(request)){ throw new BizException("部分数据已归档,无法编辑或删除"); } + + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); + } + this.repository.deleteAllById(request.getIds()); } diff --git a/src/main/java/cn/lihongjie/coal/deviceCategory/repository/DeviceCategoryRepository.java b/src/main/java/cn/lihongjie/coal/deviceCategory/repository/DeviceCategoryRepository.java index 1b0ff706..5afc3bc5 100644 --- a/src/main/java/cn/lihongjie/coal/deviceCategory/repository/DeviceCategoryRepository.java +++ b/src/main/java/cn/lihongjie/coal/deviceCategory/repository/DeviceCategoryRepository.java @@ -29,4 +29,6 @@ public interface DeviceCategoryRepository extends BaseRepository deviceIds(@Param("ids") List ids); + @Query("select exists(select 1 from DeviceEntity e where e.category.id in :ids)") + boolean isLinked(@Param("ids") List ids); } 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 006d058c..7d737495 100644 --- a/src/main/java/cn/lihongjie/coal/deviceCategory/service/DeviceCategoryService.java +++ b/src/main/java/cn/lihongjie/coal/deviceCategory/service/DeviceCategoryService.java @@ -14,6 +14,7 @@ import cn.lihongjie.coal.deviceCategory.dto.UpdateDeviceCategoryDto; import cn.lihongjie.coal.deviceCategory.entity.DeviceCategoryEntity; import cn.lihongjie.coal.deviceCategory.mapper.DeviceCategoryMapper; import cn.lihongjie.coal.deviceCategory.repository.DeviceCategoryRepository; +import cn.lihongjie.coal.exception.BizException; import lombok.extern.slf4j.Slf4j; @@ -61,6 +62,11 @@ public class DeviceCategoryService } public void delete(IdRequest request) { + + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); + } + this.repository.deleteAllById(request.getIds()); } diff --git a/src/main/java/cn/lihongjie/coal/deviceSupplier/repository/DeviceSupplierRepository.java b/src/main/java/cn/lihongjie/coal/deviceSupplier/repository/DeviceSupplierRepository.java index 57eb908e..98a8c8ec 100644 --- a/src/main/java/cn/lihongjie/coal/deviceSupplier/repository/DeviceSupplierRepository.java +++ b/src/main/java/cn/lihongjie/coal/deviceSupplier/repository/DeviceSupplierRepository.java @@ -3,7 +3,14 @@ package cn.lihongjie.coal.deviceSupplier.repository; import cn.lihongjie.coal.base.dao.BaseRepository; import cn.lihongjie.coal.deviceSupplier.entity.DeviceSupplierEntity; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface DeviceSupplierRepository extends BaseRepository {} +public interface DeviceSupplierRepository extends BaseRepository { + @Query("select exists(select 1 from DeviceEntity e where e.supplier.id in :ids)") + boolean isLinked(@Param("ids") List ids); +} diff --git a/src/main/java/cn/lihongjie/coal/deviceSupplier/service/DeviceSupplierService.java b/src/main/java/cn/lihongjie/coal/deviceSupplier/service/DeviceSupplierService.java index 74b355ff..6e01a182 100644 --- a/src/main/java/cn/lihongjie/coal/deviceSupplier/service/DeviceSupplierService.java +++ b/src/main/java/cn/lihongjie/coal/deviceSupplier/service/DeviceSupplierService.java @@ -55,6 +55,11 @@ public class DeviceSupplierService if (this.repository.containArchived(request)){ throw new BizException("部分数据已归档,无法编辑或删除"); } + + if (this.repository.isLinked(request.getIds())){ + throw new BizException("部分数据已关联,无法编辑或删除"); + } + this.repository.deleteAllById(request.getIds()); } diff --git a/src/main/java/cn/lihongjie/coal/jobPost/repository/JobPostRepository.java b/src/main/java/cn/lihongjie/coal/jobPost/repository/JobPostRepository.java index 8ce20b56..0c7d619d 100644 --- a/src/main/java/cn/lihongjie/coal/jobPost/repository/JobPostRepository.java +++ b/src/main/java/cn/lihongjie/coal/jobPost/repository/JobPostRepository.java @@ -23,6 +23,9 @@ select e.jobPost.id as id, array_agg(e.id) as empIds from EmployeeEntity e """) List getSelfEmpIds(@Param("ids") List ids); + @Query("select exists(select 1 from EmployeeEntity e where e.jobPost.id in :ids)") + boolean isLinked(@Param("ids") List ids); + record JobPostEmpDto(String id, List empIds) { } } diff --git a/src/main/java/cn/lihongjie/coal/jobPost/service/JobPostService.java b/src/main/java/cn/lihongjie/coal/jobPost/service/JobPostService.java index a2fd48eb..265dea8a 100644 --- a/src/main/java/cn/lihongjie/coal/jobPost/service/JobPostService.java +++ b/src/main/java/cn/lihongjie/coal/jobPost/service/JobPostService.java @@ -6,6 +6,7 @@ import cn.lihongjie.coal.base.entity.BaseEntity; import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.common.CollectionUtils; import cn.lihongjie.coal.common.Ctx; +import cn.lihongjie.coal.exception.BizException; import cn.lihongjie.coal.jobPost.dto.CreateJobPostDto; import cn.lihongjie.coal.jobPost.dto.JobPostDto; import cn.lihongjie.coal.jobPost.dto.UpdateJobPostDto; @@ -53,6 +54,12 @@ public class JobPostService extends BaseService {} +public interface MeterRepository extends BaseRepository { + @Query("select exists(select 1 from MeterLogEntity e where e.meter.id in :ids)") + boolean isLinked(@Param("ids") List ids); +} diff --git a/src/main/java/cn/lihongjie/coal/meter/service/MeterService.java b/src/main/java/cn/lihongjie/coal/meter/service/MeterService.java index 7d9b5bd4..6fe39d24 100644 --- a/src/main/java/cn/lihongjie/coal/meter/service/MeterService.java +++ b/src/main/java/cn/lihongjie/coal/meter/service/MeterService.java @@ -3,6 +3,7 @@ package cn.lihongjie.coal.meter.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.exception.BizException; import cn.lihongjie.coal.meter.dto.CreateMeterDto; import cn.lihongjie.coal.meter.dto.MeterDto; import cn.lihongjie.coal.meter.dto.UpdateMeterDto; @@ -48,6 +49,11 @@ class MeterService extends BaseService { } public void delete(IdRequest request) { + + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); + } + this.repository.deleteAllById(request.getIds()); } diff --git a/src/main/java/cn/lihongjie/coal/organization/dto/CreateOrganizationDto.java b/src/main/java/cn/lihongjie/coal/organization/dto/CreateOrganizationDto.java index 889e2d9c..dceb64c3 100644 --- a/src/main/java/cn/lihongjie/coal/organization/dto/CreateOrganizationDto.java +++ b/src/main/java/cn/lihongjie/coal/organization/dto/CreateOrganizationDto.java @@ -7,6 +7,7 @@ import lombok.Data; import org.hibernate.annotations.Comment; import java.time.LocalDateTime; +import java.util.List; @Data public class CreateOrganizationDto extends CommonDto { @@ -25,4 +26,6 @@ public class CreateOrganizationDto extends CommonDto { @Comment("过期时间") private LocalDateTime expireTime; + + private List permissions; } diff --git a/src/main/java/cn/lihongjie/coal/organization/dto/UpdateOrganizationDto.java b/src/main/java/cn/lihongjie/coal/organization/dto/UpdateOrganizationDto.java index 9e47c3f4..bf79c02b 100644 --- a/src/main/java/cn/lihongjie/coal/organization/dto/UpdateOrganizationDto.java +++ b/src/main/java/cn/lihongjie/coal/organization/dto/UpdateOrganizationDto.java @@ -7,6 +7,7 @@ import lombok.Data; import org.hibernate.annotations.Comment; import java.time.LocalDateTime; +import java.util.List; @Data public class UpdateOrganizationDto extends CommonDto { @@ -21,4 +22,7 @@ public class UpdateOrganizationDto extends CommonDto { @Comment("过期时间") private LocalDateTime expireTime; + + + private List permissions; } diff --git a/src/main/java/cn/lihongjie/coal/organization/entity/OrganizationEntity.java b/src/main/java/cn/lihongjie/coal/organization/entity/OrganizationEntity.java index 95f40d3e..0bdc7b55 100644 --- a/src/main/java/cn/lihongjie/coal/organization/entity/OrganizationEntity.java +++ b/src/main/java/cn/lihongjie/coal/organization/entity/OrganizationEntity.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.organization.entity; import cn.lihongjie.coal.base.entity.CommonEntity; +import cn.lihongjie.coal.permission.entity.PermissionEntity; import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonManagedReference; @@ -40,7 +41,8 @@ public class OrganizationEntity extends CommonEntity { private LocalDateTime expireTime; - + @ManyToMany + private List permissions; diff --git a/src/main/java/cn/lihongjie/coal/permission/repository/PermissionRepository.java b/src/main/java/cn/lihongjie/coal/permission/repository/PermissionRepository.java index 1e7bdc98..1afd3c56 100644 --- a/src/main/java/cn/lihongjie/coal/permission/repository/PermissionRepository.java +++ b/src/main/java/cn/lihongjie/coal/permission/repository/PermissionRepository.java @@ -4,6 +4,7 @@ import cn.lihongjie.coal.base.dao.BaseRepository; import cn.lihongjie.coal.permission.entity.PermissionEntity; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -14,9 +15,14 @@ public interface PermissionRepository extends BaseRepository { List findAllByPermissionTypeIn(String[] types); - @Query("select count(p) > 0 from PermissionEntity p inner join p.resources r on r.id = ?1 where p.permissionType = '0' ") + @Query( + "select count(p) > 0 from PermissionEntity p inner join p.resources r on r.id = ?1 where p.permissionType = '0' ") boolean isAnonymousByResourceId(String resourceId); - @Query("select count(p) > 0 from PermissionEntity p inner join p.resources r on r.id = ?1 where p.permissionType in ?2 ") - boolean hasPermission( String resourceId, List permissionType); + @Query( + "select count(p) > 0 from PermissionEntity p inner join p.resources r on r.id = ?1 where p.permissionType in ?2 ") + boolean hasPermission(String resourceId, List permissionType); + + @Query("select exists(select 1 from RoleEntity e join PermissionEntity p where p.id in :ids)") + boolean isLinked(@Param("ids") List ids); } diff --git a/src/main/java/cn/lihongjie/coal/permission/service/PermissionService.java b/src/main/java/cn/lihongjie/coal/permission/service/PermissionService.java index c1425c90..7013f02b 100644 --- a/src/main/java/cn/lihongjie/coal/permission/service/PermissionService.java +++ b/src/main/java/cn/lihongjie/coal/permission/service/PermissionService.java @@ -4,6 +4,7 @@ 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.Constants; +import cn.lihongjie.coal.exception.BizException; import cn.lihongjie.coal.permission.dto.CreatePermissionDto; import cn.lihongjie.coal.permission.dto.PermissionDto; import cn.lihongjie.coal.permission.dto.PermissionExportDto; @@ -59,6 +60,10 @@ public class PermissionService extends BaseService { + @Query( + "select exists(select 1 from PermissionEntity e join ResourceEntity r where r.id in :ids)") + boolean isLinked(@Param("ids") List ids); + // @EntityGraph(attributePaths = {"children"}) List findAllByTypeAndParentIsNullOrderBySortKey(String type); ResourceEntity findByUrlAndType(String url, String type); - @Query("select new cn.lihongjie.coal.resource.dto.ResourceDto(r.id, r.code, r.name, r.type, r.anonymous, r.orgAdmin, r.sysAdmin, r.signCheck, r.rateLimit, r.submitToken) from ResourceEntity r where r.code = ?1 and r.type = ?2 ") + @Query( + "select new cn.lihongjie.coal.resource.dto.ResourceDto(r.id, r.code, r.name, r.type, r.anonymous, r.orgAdmin, r.sysAdmin, r.signCheck, r.rateLimit, r.submitToken) from ResourceEntity r where r.code = ?1 and r.type = ?2 ") ResourceDto findByCodeAndType(String code, String type); } diff --git a/src/main/java/cn/lihongjie/coal/resource/service/ResourceService.java b/src/main/java/cn/lihongjie/coal/resource/service/ResourceService.java index 99ae0d2e..8286d35b 100644 --- a/src/main/java/cn/lihongjie/coal/resource/service/ResourceService.java +++ b/src/main/java/cn/lihongjie/coal/resource/service/ResourceService.java @@ -8,6 +8,7 @@ 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.Constants; +import cn.lihongjie.coal.exception.BizException; import cn.lihongjie.coal.permission.service.PermissionService; import cn.lihongjie.coal.resource.dto.*; import cn.lihongjie.coal.resource.entity.ResourceEntity; @@ -72,6 +73,11 @@ public class ResourceService extends BaseService { List findAllByIsSysDefault(Boolean isSysDefault); List findAllByIsOrgAdmin(Boolean isOrgAdmin); + + @Query("select exists(select 1 from UserEntity e join RoleEntity r where r.id in :ids)") + boolean isLinked(@Param("ids") List ids); } diff --git a/src/main/java/cn/lihongjie/coal/role/service/RoleService.java b/src/main/java/cn/lihongjie/coal/role/service/RoleService.java index 42222249..49993812 100644 --- a/src/main/java/cn/lihongjie/coal/role/service/RoleService.java +++ b/src/main/java/cn/lihongjie/coal/role/service/RoleService.java @@ -3,6 +3,7 @@ package cn.lihongjie.coal.role.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.exception.BizException; import cn.lihongjie.coal.role.dto.CreateRoleDto; import cn.lihongjie.coal.role.dto.RoleDto; import cn.lihongjie.coal.role.dto.UpdateRoleDto; @@ -60,6 +61,9 @@ class RoleService extends BaseService { @CacheEvict(cacheNames = "userResources", allEntries = true) public void delete(IdRequest request) { + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); + } this.repository.deleteAllById(request.getIds()); } diff --git a/src/main/java/cn/lihongjie/coal/weightDevice/repository/WeightDeviceRepository.java b/src/main/java/cn/lihongjie/coal/weightDevice/repository/WeightDeviceRepository.java index 538ebc49..69b0b751 100644 --- a/src/main/java/cn/lihongjie/coal/weightDevice/repository/WeightDeviceRepository.java +++ b/src/main/java/cn/lihongjie/coal/weightDevice/repository/WeightDeviceRepository.java @@ -3,7 +3,15 @@ package cn.lihongjie.coal.weightDevice.repository; import cn.lihongjie.coal.base.dao.BaseRepository; import cn.lihongjie.coal.weightDevice.entity.WeightDeviceEntity; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface WeightDeviceRepository extends BaseRepository {} +public interface WeightDeviceRepository extends BaseRepository { + + @Query("select exists(select 1 from WeightDeviceDataEntity e where e.device.id in :ids)") + boolean isLinked(@Param("ids") List ids); +} diff --git a/src/main/java/cn/lihongjie/coal/weightDevice/service/WeightDeviceService.java b/src/main/java/cn/lihongjie/coal/weightDevice/service/WeightDeviceService.java index 43082e3e..78f3601c 100644 --- a/src/main/java/cn/lihongjie/coal/weightDevice/service/WeightDeviceService.java +++ b/src/main/java/cn/lihongjie/coal/weightDevice/service/WeightDeviceService.java @@ -4,6 +4,7 @@ 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.dbFunctions.DbFunctionService; +import cn.lihongjie.coal.exception.BizException; import cn.lihongjie.coal.weightDevice.dto.CreateWeightDeviceDto; import cn.lihongjie.coal.weightDevice.dto.UpdateWeightDeviceDto; import cn.lihongjie.coal.weightDevice.dto.WeightDeviceDto; @@ -50,6 +51,11 @@ public class WeightDeviceService extends BaseService {} + extends BaseRepository { + + @Query("select exists(select 1 from WeightDeviceEntity e where e.supplier.id in :ids)") + boolean isLinked(@Param("ids") List ids); +} diff --git a/src/main/java/cn/lihongjie/coal/weightDeviceSupplier/service/WeightDeviceSupplierService.java b/src/main/java/cn/lihongjie/coal/weightDeviceSupplier/service/WeightDeviceSupplierService.java index 439f46e2..da46b3a3 100644 --- a/src/main/java/cn/lihongjie/coal/weightDeviceSupplier/service/WeightDeviceSupplierService.java +++ b/src/main/java/cn/lihongjie/coal/weightDeviceSupplier/service/WeightDeviceSupplierService.java @@ -4,6 +4,7 @@ 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.dbFunctions.DbFunctionService; +import cn.lihongjie.coal.exception.BizException; import cn.lihongjie.coal.weightDeviceSupplier.dto.CreateWeightDeviceSupplierDto; import cn.lihongjie.coal.weightDeviceSupplier.dto.UpdateWeightDeviceSupplierDto; import cn.lihongjie.coal.weightDeviceSupplier.dto.WeightDeviceSupplierDto; @@ -51,6 +52,10 @@ public class WeightDeviceSupplierService } public void delete(IdRequest request) { + if (this.repository.isLinked(request.getIds())) { + throw new BizException("部分数据已关联,无法编辑或删除"); + } + this.repository.deleteAllById(request.getIds()); }