【7.6.0】【db】更新metaobject处理获取字段逻辑

dev-7.6.0-hang
fengshuonan 2023-05-31 00:28:23 +08:00
parent fd66aeee1e
commit bd4aad9ecc
2 changed files with 64 additions and 2 deletions

View File

@ -0,0 +1,61 @@
package cn.stylefeng.roses.kernel.db.api.util;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseBusinessEntity;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseExpandFieldEntity;
import java.lang.reflect.Field;
/**
*
*
* @author fengshuonan
* @since 2023/5/31 0:08
*/
public class EntityFieldUtil {
/**
*
* <p>
* BaseExpandFieldEntitydelFlag
* getField()getDeclaredField()privateField
*
* @author fengshuonan
* @since 2023/5/31 0:09
*/
public static Field getDeclaredField(Object declareObject, String fieldName) throws NoSuchFieldException {
if (ObjectUtil.isEmpty(declareObject)) {
throw new NoSuchFieldException();
}
Class<?> objectClass = declareObject.getClass();
// 先获取本类中是否有指定字段
try {
return objectClass.getDeclaredField(fieldName);
} catch (NoSuchFieldException e) {
// 本类中没有这个字段,再去逐级获取父级类中是否有这个字段
Class<?> superclass = objectClass.getSuperclass();
// 如果父级是BaseExpandFieldEntity则直接获取父父级字段
if (superclass.equals(BaseExpandFieldEntity.class)) {
Class<?> baseBusinessEntityClass = superclass.getSuperclass();
return baseBusinessEntityClass.getDeclaredField(fieldName);
}
// 如果父级是BaseBusinessEntity则直接获取父级的字段
else if (superclass.equals(BaseBusinessEntity.class)) {
return superclass.getDeclaredField(fieldName);
}
// 其他情况不做判断
else {
throw e;
}
}
}
}

View File

@ -28,6 +28,7 @@ import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.db.api.constants.DbFieldConstants;
import cn.stylefeng.roses.kernel.db.api.util.EntityFieldUtil;
import cn.stylefeng.roses.kernel.rule.enums.StatusEnum;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
@ -152,7 +153,7 @@ public class CustomMetaObjectHandler implements MetaObjectHandler {
Object originalObject = metaObject.getOriginalObject();
try {
// 获取delFlag字段的类型如果是枚举类型则设置枚举
Field declaredField = originalObject.getClass().getDeclaredField(DbFieldConstants.DEL_FLAG);
Field declaredField = EntityFieldUtil.getDeclaredField(originalObject, DbFieldConstants.DEL_FLAG);
if (ClassUtil.isEnum(declaredField.getType())) {
setFieldValByName(DbFieldConstants.DEL_FLAG, YesOrNotEnum.N, metaObject);
} else {
@ -177,7 +178,7 @@ public class CustomMetaObjectHandler implements MetaObjectHandler {
Object originalObject = metaObject.getOriginalObject();
try {
// 获取statusFlag字段的类型如果是枚举类型则设置枚举
Field declaredField = originalObject.getClass().getDeclaredField(DbFieldConstants.STATUS_FLAG);
Field declaredField = EntityFieldUtil.getDeclaredField(originalObject, DbFieldConstants.STATUS_FLAG);
if (ClassUtil.isEnum(declaredField.getType())) {
setFieldValByName(DbFieldConstants.STATUS_FLAG, StatusEnum.ENABLE, metaObject);
} else {