package org.yeshi.utils.generater.vo.admin.controller; import org.springframework.data.annotation.Transient; import org.yeshi.utils.generater.entity.ClassInfo; import org.yeshi.utils.generater.entity.ColumnData; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; /** * @author hxh * @title: AdminVO * @description: TODO * @date 2022/4/7 18:24 */ public class AdminVOVO { private String name; private String packageName; private ClassInfo entity; private List columns; public static class Builder { private Class entity; private String packageName; public Builder setEntity(Class entity) { this.entity = entity; return this; } public Builder setPackageName(String packageName) { this.packageName = packageName; return this; } public AdminVOVO build() throws Exception { if (entity == null) { throw new Exception("entity不能为空"); } if (packageName == null) { throw new Exception("packageName不能为空"); } AdminVOVO vo = new AdminVOVO(); vo.setEntity(ClassInfo.create(entity)); vo.setName(entity.getSimpleName() + "AdminVO"); vo.setPackageName(packageName); List columnList = new ArrayList<>(); Field[] fields = entity.getDeclaredFields(); for (Field fd : fields) { //private/public 非final,static属性才会参与解析 if (fd.getModifiers() != 1 && fd.getModifiers() != 2) { continue; } boolean valid = true; Annotation[] as = fd.getAnnotations(); for (Annotation a : as) { //不参与解析 if (a instanceof Transient || a instanceof java.beans.Transient) { valid = false; break; } } if (!valid) { continue; } String property = fd.getName(); if(property.equalsIgnoreCase("createTime")||property.equalsIgnoreCase("updateTime")){ continue; } String type = fd.getType().getSimpleName(); ColumnData columnData = new ColumnData(property, type); columnList.add(columnData); } vo.setColumns(columnList); return vo; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public ClassInfo getEntity() { return entity; } public void setEntity(ClassInfo entity) { this.entity = entity; } public List getColumns() { return columns; } public void setColumns(List columns) { this.columns = columns; } }