Merge remote-tracking branch 'base-version/main' into dev

This commit is contained in:
chenbowen
2025-12-01 17:52:13 +08:00
15 changed files with 606 additions and 66 deletions

View File

@@ -36,6 +36,11 @@
<artifactId>zt-spring-boot-starter-biz-tenant</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.zt.plat</groupId>
<artifactId>zt-spring-boot-starter-mybatis</artifactId>
<version>${revision}</version>
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>com.zt.plat</groupId>

View File

@@ -2,27 +2,54 @@ package com.zt.plat.framework.business.framework;
import com.zt.plat.framework.datapermission.core.rule.company.CompanyDataPermissionRuleCustomizer;
import com.zt.plat.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.LinkedHashSet;
import java.util.Set;
/**
* @author chenbowen
* 自动为继承 BusinessBaseDO 的实体注册公司/部门数据权限字段。
*/
@Configuration(proxyBeanMethods = false)
public class BusinessDataPermissionConfiguration {
@Bean
public CompanyDataPermissionRuleCustomizer sysCompanyDataPermissionRuleCustomizer() {
return rule -> {
// companyId
rule.addCompanyColumn("demo_contract", "company_id");
};
public BusinessDataPermissionEntityScanner businessDataPermissionEntityScanner(BeanFactory beanFactory, ApplicationContext applicationContext) {
Set<String> basePackages = new LinkedHashSet<>();
if (AutoConfigurationPackages.has(beanFactory)) {
basePackages.addAll(AutoConfigurationPackages.get(beanFactory));
}
if (basePackages.isEmpty()) {
basePackages.add("com.zt");
}
ClassLoader classLoader = applicationContext != null
? applicationContext.getClassLoader()
: Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
classLoader = BusinessDataPermissionConfiguration.class.getClassLoader();
}
return new BusinessDataPermissionEntityScanner(basePackages, classLoader);
}
@Bean
public DeptDataPermissionRuleCustomizer businessDeptDataPermissionRuleCustomizer() {
return rule -> {
// dept
rule.addDeptColumn("demo_contract", "dept_id");
};
public CompanyDataPermissionRuleCustomizer autoCompanyDataPermissionRuleCustomizer(BusinessDataPermissionEntityScanner scanner) {
return rule -> scanner.getEntityMetadata().forEach(metadata -> {
if (metadata.hasCompanyColumn()) {
rule.addCompanyColumn(metadata.getTableName(), metadata.getCompanyColumn());
}
});
}
@Bean
public DeptDataPermissionRuleCustomizer autoDeptDataPermissionRuleCustomizer(BusinessDataPermissionEntityScanner scanner) {
return rule -> scanner.getEntityMetadata().forEach(metadata -> {
if (metadata.hasDeptColumn()) {
rule.addDeptColumn(metadata.getTableName(), metadata.getDeptColumn());
}
});
}
}

View File

@@ -0,0 +1,23 @@
package com.zt.plat.framework.mybatis.core.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 标记业务实体对应表中的公司字段名称,默认 company_id。
*
* @author chenbow
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface CompanyColumn {
/**
* 表中公司字段名称
*/
String value() default "company_id";
}

View File

@@ -0,0 +1,23 @@
package com.zt.plat.framework.mybatis.core.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 标记业务实体对应表中的部门字段名称,默认 dept_id。
*
* @author chenbow
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface DeptColumn {
/**
* 表中部门字段名称
*/
String value() default "dept_id";
}

View File

@@ -2,6 +2,8 @@ package com.zt.plat.framework.mybatis.core.dataobject;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.zt.plat.framework.mybatis.core.annotation.CompanyColumn;
import com.zt.plat.framework.mybatis.core.annotation.DeptColumn;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType;
@@ -13,6 +15,8 @@ import java.util.List;
*/
@Data
@EqualsAndHashCode(callSuper = true)
@CompanyColumn
@DeptColumn
public class BusinessBaseDO extends BaseDO {
/** 公司编号 */