Dimension uses AOP to add Name

1.Add files

2.DimName annotation, entity use

package annotation;

import MateTypeEnum;

import java.lang.annotation.*;

/**
 * Dictionary translation annotations
 *
 * @author pw
 */
@Documented
@Target(ElementType.FIELD)//Can be used on method names
@Retention(RetentionPolicy.RUNTIME)// Valid at runtime
public @interface DimName {<!-- -->

    /**
     * This field represents the encoding of the dictionary type
     */
    //Class clazz() default this.clazz();
    Class<? extends Enum<?>> clazz() default MateTypeEnum.class;

    String type() default "";//DIM-dimension ""-constant

    /**
     * The name of the mapped field, if not, the current field value will be overwritten.
     */
    String fieldName() default "";
}

3.DimVerify annotation

package annotation;

import java.lang.annotation.*;

/**
 * @author pw
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DimVerify {<!-- -->
}

3.DimVerifyAspect, aop aspect

package aop;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

@Aspect
@Component
@Slf4j
public class DimVerifyAspect {<!-- -->

    @AfterReturning(value = "@annotation( com.mdfp.dim.sdk.annotation.DimVerify)", returning = "obj")
    public void doAround(Object obj) throws Throwable {<!-- -->
        this.getDictValue(obj);
    }

    private void getDictValue(Object data) throws Throwable {<!-- -->
        if (null == data) {<!-- -->
            return;
        }
        List<Object> list;
        if (data instanceof List) {<!-- -->
            list = (List) data;
        } else if (data instanceof Pagination) {<!-- -->
            list = ((Pagination) data).getData();
        } else if (data instanceof IPage) {<!-- -->
            list = ((IPage) data).getRecords();
        } else {<!-- -->
            list = new ArrayList<>();
            list.add(data);
        }
        if (null == list || list.size() == 0) {<!-- -->
            return;
        }
        //Reflection gets the attributes in the returned date
        Class<?> clazz = list.get(0).getClass();
        Field[] fieldArr = clazz.getDeclaredFields();
        // Get the bytecode object of the parent class
        for (Object object : list) {<!-- -->
            for (Field field : fieldArr) {<!-- -->
                //Get attribute type
                if (field.isAnnotationPresent(DimName.class)) {<!-- -->
                    DimName dimName = field.getAnnotation(DimName.class);
                    String methodeName = dimName.fieldName();//Default field name
                    if (ObjectUtil.isEmpty(methodeName)) {<!-- -->
                        methodeName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
                    }
                    Object fileldDataO = ReflectionUtils.invokeMethod(object, "get" + methodeName,
                            new Class[]{<!-- -->}, new Object[]{<!-- -->});//Get the value
                    if (ObjectUtil.isNotEmpty(fileldDataO)) {<!-- -->
                        Class<Enum> dimNameClazz = (Class<Enum>) Class.forName(dimName.clazz().getName());
                        String type = dimName.type();//DIM-dimension ""-constant
                        if (type.equals("DIM")) {<!-- -->
                            MdfpBaDimObjectDTO mdfpBaDimObjectDTO = DimUtils.getBaDimObjectById(fileldDataO.toString());
                            if (mdfpBaDimObjectDTO != null) {<!-- -->
                                setDimNameData(object, methodeName, mdfpBaDimObjectDTO.getObjectName());
                            }
                        } else {<!-- -->
                            Enum[] objects = dimNameClazz.getEnumConstants();
                            try {<!-- -->
                                Method getCode = dimNameClazz.getMethod("getCode");
                                Method getAlias = dimNameClazz.getMethod("getAlias");
                                for (Enum e : objects) {<!-- -->
                                    Object eCode = getCode.invoke(e);
                                    String eName = e.name();
                                    if ((eName.contains(methodeName) || eName.contains(DataUtils.camelToUnderline(methodeName))) & amp; & amp; ObjectUtil.isNotEmpty(eCode)) {<!-- -->
                                        if (eCode.toString().equals(fileldDataO.toString())) {<!-- -->
                                            setDimNameData(object, methodeName, getAlias.invoke(e));
                                        }
                                    }
                                }
                            } catch (Exception e) {<!-- -->
                                log.error("The enumeration type does not have a getCode or getAlias method");
                            }
                        }
                    }
                }
            }
        }
    }

    public void setDimNameData(Object object, String methodName, Object data) {<!-- -->
        Method method = null;
        try {<!-- -->
            method = object.getClass().getMethod("set" + methodeName + "Name", String.class);
            if (ObjectUtil.isNotEmpty(data)) {<!-- -->
                method.invoke(object, data.toString());
            }
        } catch (NoSuchMethodException e) {<!-- -->
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {<!-- -->
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {<!-- -->
            throw new RuntimeException(e);
        }
    }
}

4. Entity use

@DimName(clazz = AbDiApiEnum.class)
    private String interfaceType;//interface type
@DimName()
    private String state;//state

5.aop usage

@Override
    @DimVerify
    public IPage<MdfpAbDiApiDTO> selectMaxApiPage(MdfpAbDiApiQueryVO mdfpAbDiApiQueryVO, Integer pageIndex, Integer pageRows) {<!-- -->
        return mdfpAbDiApiMapper.selectMaxApiPage(new Page(pageIndex, pageRows), mdfpAbDiApiQueryVO);
    }
 @ApiOperation(value = "Query the latest version of the interface API paging list", notes = "Query the latest version of the interface API paging list", httpMethod = "GET")
    @ApiResponses(@ApiResponse(code = 800, message = "ok"))
    @PostMapping(value = "/selectMaxApiPage")
    @DimVerify
    public ResponseData<Pagination<MdfpAbDiApiDTO>> selectMaxApiPage(@RequestBody PaginationRequestData<MdfpAbDiApiQueryVO> requestData) {<!-- -->
        Pagination<MdfpAbDiApiDTO> mdfpAbDiApiDTOPage = mdfpAbDiApiPolyService.selectMaxApiPage(requestData.getParams(), requestData.getPageIndex(), requestData.getPageRows());
        return new ResponseData<>(StatusCodeEnum.SUCCESS_CODE.getStatusCode(), mdfpAbDiApiDTOPage, "Query successful", LanguageEnum.GENERAL_QUERY_SUCCESS.getCode(), new Object[]{<!-- -->});
    }