From 5b577e3b998b3b09c334343f2d8ccdae6d2188cd Mon Sep 17 00:00:00 2001 From: tiger <1204351172@qq.com> Date: Sat, 15 Jul 2023 23:29:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BC=95=E5=85=A5jpa=E5=A4=9A=E7=A7=9F?= =?UTF-8?q?=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 多租户查询时,使用aop处理;新增,修改使用Hibernate Filter处理 --- .../java/cc/iotkit/model/system/SysDept.java | 19 ++++- .../cc/iotkit/data/model/TbSysConfig.java | 15 ++-- .../java/cc/iotkit/data/model/TbSysDept.java | 15 ++-- .../iotkit/common/tenant/dao/TenantAware.java | 1 + .../tenant/entiry/BaseTenantEntity.java | 82 +++++++++++++++++++ .../tenant/exception/TenantException.java | 20 ----- .../tenant/listener/TenantListener.java | 5 ++ .../controller/SysOssConfigController.java | 8 +- iot-starter/pom.xml | 31 +++++++ .../src/main/java/cc/iotkit/Application.java | 5 +- .../src/main/resources/META-INF/aop.xml | 12 +++ pom.xml | 11 ++- 12 files changed, 186 insertions(+), 38 deletions(-) create mode 100644 iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/entiry/BaseTenantEntity.java delete mode 100644 iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/exception/TenantException.java create mode 100644 iot-starter/src/main/resources/META-INF/aop.xml diff --git a/iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/system/SysDept.java b/iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/system/SysDept.java index 1b3a626b..1b0c219e 100644 --- a/iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/system/SysDept.java +++ b/iot-common/iot-common-dao/iot-common-model/src/main/java/cc/iotkit/model/system/SysDept.java @@ -1,10 +1,16 @@ package cc.iotkit.model.system; +import cc.iotkit.common.tenant.dao.TenantAware; +import cc.iotkit.common.tenant.listener.TenantListener; +import cc.iotkit.model.BaseModel; import cc.iotkit.model.Id; -import cc.iotkit.model.TenantModel; import lombok.Data; import lombok.EqualsAndHashCode; +import org.hibernate.annotations.Filter; +import org.hibernate.annotations.FilterDef; +import org.hibernate.annotations.ParamDef; +import javax.persistence.EntityListeners; import java.io.Serializable; import java.util.Date; @@ -15,7 +21,10 @@ import java.util.Date; */ @EqualsAndHashCode(callSuper = true) @Data -public class SysDept extends TenantModel implements Id, Serializable { +@FilterDef(name = "tenantFilter", parameters = {@ParamDef(name = "tenantId", type = "string")}) +@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId") +@EntityListeners(TenantListener.class) +public class SysDept extends BaseModel implements Id, Serializable, TenantAware { private static final long serialVersionUID = 1L; /** @@ -73,4 +82,10 @@ public class SysDept extends TenantModel implements Id, Serializable { */ private Date createTime; + /** + * 租户编号 + */ + private String tenantId; + + } diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysConfig.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysConfig.java index 20bae543..50e628d7 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysConfig.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysConfig.java @@ -1,16 +1,18 @@ package cc.iotkit.data.model; +import cc.iotkit.common.tenant.dao.TenantAware; +import cc.iotkit.common.tenant.listener.TenantListener; import cc.iotkit.model.system.SysConfig; import io.github.linpeilie.annotations.AutoMapper; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import org.hibernate.annotations.Filter; +import org.hibernate.annotations.FilterDef; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.ParamDef; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; /** * 参数配置表 sys_config @@ -23,7 +25,10 @@ import javax.persistence.Table; @Entity @Table(name = "sys_config") @AutoMapper(target = SysConfig.class) -public class TbSysConfig extends BaseEntity { +@FilterDef(name = "tenantFilter", parameters = {@ParamDef(name = "tenantId", type = "string")}) +@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId") +@EntityListeners(TenantListener.class) +public class TbSysConfig extends BaseEntity implements TenantAware { /** * 参数主键 diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysDept.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysDept.java index ed7b3e0c..e8db9e77 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysDept.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysDept.java @@ -1,18 +1,20 @@ package cc.iotkit.data.model; import cc.iotkit.common.constant.UserConstants; +import cc.iotkit.common.tenant.dao.TenantAware; +import cc.iotkit.common.tenant.listener.TenantListener; import cc.iotkit.model.system.SysDept; import io.github.linpeilie.annotations.AutoMapper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import org.hibernate.annotations.Filter; +import org.hibernate.annotations.FilterDef; import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.ParamDef; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; /** * 部门表 sys_dept @@ -26,7 +28,10 @@ import javax.persistence.Table; @Table(name = "sys_dept") @AutoMapper(target = SysDept.class) @ApiModel(value = "部门表") -public class TbSysDept extends BaseEntity { +@FilterDef(name = "tenantFilter", parameters = {@ParamDef(name = "tenantId", type = "string")}) +@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId") +@EntityListeners(TenantListener.class) +public class TbSysDept extends BaseEntity implements TenantAware { private static final long serialVersionUID = 1L; /** diff --git a/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/TenantAware.java b/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/TenantAware.java index 26e06d62..3c5d57c4 100644 --- a/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/TenantAware.java +++ b/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/TenantAware.java @@ -1,5 +1,6 @@ package cc.iotkit.common.tenant.dao; + public interface TenantAware { void setTenantId(String tenantId); } diff --git a/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/entiry/BaseTenantEntity.java b/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/entiry/BaseTenantEntity.java new file mode 100644 index 00000000..b6218a34 --- /dev/null +++ b/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/entiry/BaseTenantEntity.java @@ -0,0 +1,82 @@ +package cc.iotkit.common.tenant.entiry; + +import cc.iotkit.common.tenant.dao.TenantAware; +import cc.iotkit.common.tenant.listener.TenantListener; +import lombok.Data; +import org.hibernate.annotations.Filter; +import org.hibernate.annotations.FilterDef; +import org.hibernate.annotations.ParamDef; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; + +import javax.persistence.Column; +import javax.persistence.EntityListeners; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.validation.constraints.Size; +import java.io.Serializable; +import java.util.Date; + +/** + * 类描述... + * + * @author Tiger Chen + * created on 2023/7/15 20:53 + */ + + +@MappedSuperclass +@Data +@FilterDef(name = "tenantFilter", parameters = {@ParamDef(name = "tenantId", type = "string")}) +@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId") +@EntityListeners(TenantListener.class) +public abstract class BaseTenantEntity implements TenantAware, Serializable { + private static final long serialVersionUID = 1L; + + @Id + private Long id; + + @Size(max = 30) + @Column(name = "tenant_id") + private String tenantId; + + /** + * 创建部门 + */ + private Long createDept; + + /** + * 创建者 + */ + @CreatedBy + @Column(name = "create_by", updatable = false) + private Long createBy; + + /** + * 创建时间 + */ + @CreatedDate + @Column(name = "create_time", updatable = false) + private Date createTime; + + /** + * 更新者 + */ + @LastModifiedBy + @Column(name = "update_by") + private Long updateBy; + + /** + * 更新时间 + */ + @LastModifiedDate + @Column(name = "update_time") + private Date updateTime; + + public BaseTenantEntity(String tenantId) { + this.tenantId = tenantId; + } + +} \ No newline at end of file diff --git a/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/exception/TenantException.java b/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/exception/TenantException.java deleted file mode 100644 index d2bebc99..00000000 --- a/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/exception/TenantException.java +++ /dev/null @@ -1,20 +0,0 @@ -package cc.iotkit.common.tenant.exception; - - -import cc.iotkit.common.exception.BizException; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 租户异常类 - * - * @author Lion Li - */ -@EqualsAndHashCode(callSuper = true) -@Data -public class TenantException extends BizException { - - public TenantException(Integer code, String message) { - super("tenant", code, message); - } -} diff --git a/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java b/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java index c9fd46a2..35693a75 100644 --- a/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java +++ b/iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java @@ -3,7 +3,9 @@ package cc.iotkit.common.tenant.listener; import cc.iotkit.common.satoken.utils.LoginHelper; import cc.iotkit.common.tenant.dao.TenantAware; +import lombok.extern.slf4j.Slf4j; +import javax.persistence.PostLoad; import javax.persistence.PrePersist; import javax.persistence.PreRemove; import javax.persistence.PreUpdate; @@ -15,14 +17,17 @@ import javax.persistence.PreUpdate; * created on 2023/7/14 20:50 */ +@Slf4j public class TenantListener { @PreUpdate @PreRemove @PrePersist + @PostLoad public void setTenant(TenantAware entity) { final String tenantId = LoginHelper.getTenantId(); + log.info("Hibernate 监听器,设置租户ID:{}", tenantId); entity.setTenantId(tenantId); } } diff --git a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysOssConfigController.java b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysOssConfigController.java index fbce3249..50eadb70 100644 --- a/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysOssConfigController.java +++ b/iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysOssConfigController.java @@ -14,11 +14,9 @@ import cc.iotkit.system.service.ISysOssConfigService; import cn.dev33.satoken.annotation.SaCheckPermission; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -32,6 +30,8 @@ import java.util.List; @Validated @RequiredArgsConstructor @RestController +@Controller +@ResponseBody @RequestMapping("/resource/oss/config") public class SysOssConfigController extends BaseController { diff --git a/iot-starter/pom.xml b/iot-starter/pom.xml index a89e7355..31fc585c 100644 --- a/iot-starter/pom.xml +++ b/iot-starter/pom.xml @@ -213,7 +213,26 @@ cn.hutool hutool-core + + org.aspectj + aspectjrt + + + org.aspectj + aspectjtools + + + + org.aspectj + aspectjweaver + + + + org.assertj + assertj-core + + @@ -269,6 +288,18 @@ + + + org.springframework.boot + spring-boot-maven-plugin + + + ${project.build.directory}/spring-instrument-${spring-framework.version}.jar + ${project.build.directory}/aspectjweaver-${aspectj.version}.jar + + + + diff --git a/iot-starter/src/main/java/cc/iotkit/Application.java b/iot-starter/src/main/java/cc/iotkit/Application.java index d1765178..47f11d2f 100644 --- a/iot-starter/src/main/java/cc/iotkit/Application.java +++ b/iot-starter/src/main/java/cc/iotkit/Application.java @@ -14,7 +14,9 @@ import cc.iotkit.config.EmbeddedRedisConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.EnableLoadTimeWeaving; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @@ -23,7 +25,8 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; @EnableTransactionManagement @EnableWebMvc @EnableFeignClients(basePackages = {"cc.iotkit.baetyl.feign"}) -public class Application { +@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED) +public class Application extends SpringBootServletInitializer { public static void main(String[] args) { System.setProperty("disabledEmbeddedEs", "true"); diff --git a/iot-starter/src/main/resources/META-INF/aop.xml b/iot-starter/src/main/resources/META-INF/aop.xml new file mode 100644 index 00000000..16543432 --- /dev/null +++ b/iot-starter/src/main/resources/META-INF/aop.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 496502be..662026f5 100755 --- a/pom.xml +++ b/pom.xml @@ -3,11 +3,20 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.11 + + + cc.iotkit iotkit-parent ${revision} ${project.artifactId} - 奇特物联是一个开源的物联网基础开发平台,提供了物联网及相关业务开发的常见基础功能, 能帮助你快速搭建自己的物联网相关业务平台。 + 奇特物联是一个开源的物联网基础开发平台,提供了物联网及相关业务开发的常见基础功能, + 能帮助你快速搭建自己的物联网相关业务平台。 + https://gitee.com/iotkit-open-source/iotkit-parent pom