|
|
@@ -1,44 +1,41 @@
|
|
|
package com.storlead.framework.mybatis.handler;
|
|
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
+import com.baomidou.mybatisplus.annotation.TableName;
|
|
|
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
|
|
import com.storlead.framework.auth.vo.LoginUser;
|
|
|
import com.storlead.framework.common.constant.UserCacheKeyConstants;
|
|
|
import com.storlead.framework.core.context.Context;
|
|
|
import com.storlead.framework.core.tenant.TenantContext;
|
|
|
+import com.storlead.framework.mybatis.tenant.TenantProperties;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.ibatis.reflection.MetaObject;
|
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
|
/**
|
|
|
- * @program: sp-sales
|
|
|
- * @description:
|
|
|
- * @author: chenkq
|
|
|
- * @create: 2022-07-06 15:03
|
|
|
+ * 公共字段自动填充;tenant_id 仅对白名单表且实体含 tenantId 字段时写入。
|
|
|
*/
|
|
|
@Slf4j
|
|
|
public class MyMetaObjectHandler implements MetaObjectHandler {
|
|
|
|
|
|
- /**
|
|
|
- * 自动更新
|
|
|
- * 需要 @TableField(fill = FieldFill.INSERT) 否则无效
|
|
|
- *
|
|
|
- * @param metaObject 要处理的对象
|
|
|
- * @author chenkq
|
|
|
- * @date 2022-2-3 12:25
|
|
|
- */
|
|
|
+ private final TenantProperties tenantProperties;
|
|
|
+
|
|
|
+ public MyMetaObjectHandler(TenantProperties tenantProperties) {
|
|
|
+ this.tenantProperties = tenantProperties;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void insertFill(MetaObject metaObject) {
|
|
|
Object createTime = getFieldValByName("createTime", metaObject);
|
|
|
if (Objects.isNull(createTime)) {
|
|
|
- DateTime time= new DateTime();
|
|
|
- this.setInsertFieldValByName("createTime",time,metaObject);
|
|
|
+ DateTime time = new DateTime();
|
|
|
+ this.setInsertFieldValByName("createTime", time, metaObject);
|
|
|
}
|
|
|
Object updateTime = getFieldValByName("updateTime", metaObject);
|
|
|
if (Objects.isNull(updateTime)) {
|
|
|
- DateTime time= new DateTime();
|
|
|
- this.setUpdateFieldValByName( "updateTime",time, metaObject);
|
|
|
+ DateTime time = new DateTime();
|
|
|
+ this.setUpdateFieldValByName("updateTime", time, metaObject);
|
|
|
}
|
|
|
if (Objects.isNull(Context.getContext())) {
|
|
|
return;
|
|
|
@@ -47,7 +44,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
|
|
|
Object createBy = getFieldValByName("createBy", metaObject);
|
|
|
if (Objects.isNull(createBy)) {
|
|
|
if (Objects.nonNull(loginUser)) {
|
|
|
- this.setInsertFieldValByName("createBy",loginUser.getId(),metaObject);
|
|
|
+ this.setInsertFieldValByName("createBy", loginUser.getId(), metaObject);
|
|
|
}
|
|
|
}
|
|
|
Object ownerBy = getFieldValByName("ownerBy", metaObject);
|
|
|
@@ -56,7 +53,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
|
|
|
this.setInsertFieldValByName("ownerBy", loginUser.getId(), metaObject);
|
|
|
}
|
|
|
}
|
|
|
- if (metaObject.hasSetter("tenantId")) {
|
|
|
+ if (metaObject.hasSetter("tenantId") && shouldFillTenantId(metaObject)) {
|
|
|
Object tenantIdVal = getFieldValByName("tenantId", metaObject);
|
|
|
if (Objects.isNull(tenantIdVal)) {
|
|
|
Long tid = TenantContext.getTenantId();
|
|
|
@@ -68,23 +65,15 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
|
|
|
Object updateBy = getFieldValByName("updateBy", metaObject);
|
|
|
if (Objects.isNull(updateBy)) {
|
|
|
if (Objects.nonNull(loginUser)) {
|
|
|
- this.setInsertFieldValByName("updateBy",loginUser.getId(),metaObject);
|
|
|
+ this.setInsertFieldValByName("updateBy", loginUser.getId(), metaObject);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 自动更新
|
|
|
- * 需要 @TableField(fill = FieldFill.UPDATE) 否则无效
|
|
|
- *
|
|
|
- * @param metaObject 要处理的对象
|
|
|
- * @author chenkq
|
|
|
- * @date 2022-2-3 12:25
|
|
|
- */
|
|
|
@Override
|
|
|
public void updateFill(MetaObject metaObject) {
|
|
|
- DateTime time= new DateTime();
|
|
|
- this.setUpdateFieldValByName( "updateTime",time, metaObject);
|
|
|
+ DateTime time = new DateTime();
|
|
|
+ this.setUpdateFieldValByName("updateTime", time, metaObject);
|
|
|
if (Objects.isNull(Context.getContext())) {
|
|
|
return;
|
|
|
}
|
|
|
@@ -92,8 +81,20 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
|
|
|
LoginUser loginUser = Context.getContext().getAttribute(UserCacheKeyConstants.LOGIN_USER_INFO_KEY, LoginUser.class);
|
|
|
if (Objects.isNull(updateBy)) {
|
|
|
if (Objects.nonNull(loginUser)) {
|
|
|
- this.setInsertFieldValByName("updateBy",loginUser.getId(),metaObject);
|
|
|
+ this.setInsertFieldValByName("updateBy", loginUser.getId(), metaObject);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private boolean shouldFillTenantId(MetaObject metaObject) {
|
|
|
+ Object original = metaObject.getOriginalObject();
|
|
|
+ if (original == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ TableName tableName = original.getClass().getAnnotation(TableName.class);
|
|
|
+ if (tableName == null || tableName.value().isEmpty()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return tenantProperties.shouldApplyTenantLine(tableName.value());
|
|
|
+ }
|
|
|
}
|