package org.yeshi.utils.generater.vo.dao;
|
|
import org.springframework.data.annotation.Id;
|
import org.springframework.data.annotation.Transient;
|
import org.yeshi.utils.StringUtil;
|
import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition;
|
import org.yeshi.utils.generater.entity.*;
|
|
import java.lang.annotation.Annotation;
|
import java.lang.reflect.Field;
|
import java.util.ArrayList;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
|
public class MongoDBDaoVO extends BaseData {
|
|
private String daoName;
|
private ClassInfo baseDao;
|
private ClassInfo entity;
|
private Set<String> importClasses;
|
|
private ColumnData identityColumn;
|
private List<ColumnData> columnDataList;
|
|
private List<DaoQueryColumnData> daoQueryColumnDataList;
|
|
public static class Builder {
|
|
private ClassInfo baseDao;
|
private Class entity;
|
private ClassInfo dao;
|
|
public Builder setBaseDao(ClassInfo baseDao) {
|
this.baseDao = baseDao;
|
return this;
|
}
|
|
public Builder setEntity(Class entity) {
|
this.entity = entity;
|
return this;
|
}
|
|
public Builder setDao(ClassInfo dao) {
|
this.dao = dao;
|
return this;
|
}
|
|
public MongoDBDaoVO build() throws Exception {
|
|
if (entity == null) {
|
throw new Exception("entity不能为空");
|
}
|
|
if (baseDao == null) {
|
throw new Exception("baseDao不能为空");
|
}
|
|
if (dao == null) {
|
throw new Exception("dao不能为空");
|
}
|
|
|
Field[] fields = entity.getDeclaredFields();
|
String identityColumnName = null;
|
String identityColumnType = null;
|
List<ColumnData> columlist = new ArrayList<>();
|
List<DaoQueryColumnData> daoQueryColumnList = new ArrayList<>();
|
for (Field fd : fields) {
|
//private/public 非final,static属性才会参与解析
|
if (fd.getModifiers() != 1 && fd.getModifiers() != 2) {
|
continue;
|
}
|
String columName = fd.getName();
|
String columnDataType = fd.getGenericType().getTypeName();
|
Annotation[] as = fd.getAnnotations();
|
if (columName != null) {
|
for (Annotation a : as) {
|
//主键
|
if (a instanceof Id) {
|
identityColumnName = new String(columName);
|
identityColumnType = columnDataType;
|
columName = null;
|
break;
|
}
|
}
|
}
|
|
for (Annotation a : as) {
|
//不参与解析
|
if (a instanceof Transient || a instanceof java.beans.Transient) {
|
columName = null;
|
break;
|
}
|
}
|
|
//获取查询条件
|
for (Annotation a : as) {
|
if (a instanceof DaoQueryCondition) {
|
MybatisColumnData columnData=new MybatisColumnData(columName);
|
if (fd.getType().getSimpleName().equalsIgnoreCase("Date")) {
|
daoQueryColumnList.add(new DaoQueryColumnData("max" + StringUtil.firstCharToUpper(columName),columnData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.lt));
|
daoQueryColumnList.add(new DaoQueryColumnData("min" + StringUtil.firstCharToUpper(columName),columnData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.gte));
|
} else {
|
daoQueryColumnList.add(new DaoQueryColumnData(columName,columnData, fd.getType().getSimpleName(), ((DaoQueryCondition) a).queryType()));
|
}
|
break;
|
}
|
}
|
|
if (columName != null) {
|
columlist.add(new ColumnData(columName, columnDataType));
|
}
|
}
|
|
List<ColumnData> columnDataList = new ArrayList<>();
|
for (ColumnData column : columlist) {
|
//更新时间不参与更新
|
if (!"updateTime".equalsIgnoreCase(column.getColumnName())) {
|
columnDataList.add(column);
|
}
|
}
|
|
Set<String> importClasses = new HashSet<>();
|
for (ColumnData columnData : columnDataList) {
|
if (columnData.getType().indexOf(".") > -1) {
|
importClasses.add(columnData.getType());
|
columnData.setType(columnData.getType().split("\\.")[columnData.getType().split("\\.").length - 1]);
|
}
|
}
|
|
importClasses.add("java.util.List");
|
importClasses.add("java.util.ArrayList");
|
|
|
MongoDBDaoVO data = new MongoDBDaoVO();
|
data.setBaseDao(baseDao);
|
data.setColumnDataList(columnDataList);
|
data.setDaoQueryColumnDataList(daoQueryColumnList);
|
data.setDaoName(dao.getName());
|
data.setEntity(new ClassInfo(entity.getSimpleName(), entity.getName()));
|
data.setIdentityColumn(new ColumnData(identityColumnName, identityColumnType));
|
data.setPackageName(dao.getClazz().replace("." + dao.getName(), ""));
|
|
importClasses.add(baseDao.getClazz());
|
importClasses.add(entity.getName());
|
data.setImportClasses(importClasses);
|
|
return data;
|
}
|
}
|
|
|
public String getDaoName() {
|
return daoName;
|
}
|
|
public void setDaoName(String daoName) {
|
this.daoName = daoName;
|
}
|
|
public ClassInfo getBaseDao() {
|
return baseDao;
|
}
|
|
public void setBaseDao(ClassInfo baseDao) {
|
this.baseDao = baseDao;
|
}
|
|
@Override
|
public ClassInfo getEntity() {
|
return entity;
|
}
|
|
@Override
|
public void setEntity(ClassInfo entity) {
|
this.entity = entity;
|
}
|
|
public ColumnData getIdentityColumn() {
|
return identityColumn;
|
}
|
|
public void setIdentityColumn(ColumnData identityColumn) {
|
this.identityColumn = identityColumn;
|
}
|
|
|
public List<ColumnData> getColumnDataList() {
|
return columnDataList;
|
}
|
|
public void setColumnDataList(List<ColumnData> columnDataList) {
|
this.columnDataList = columnDataList;
|
}
|
|
public Set<String> getImportClasses() {
|
return importClasses;
|
}
|
|
public void setImportClasses(Set<String> importClasses) {
|
this.importClasses = importClasses;
|
}
|
|
|
public List<DaoQueryColumnData> getDaoQueryColumnDataList() {
|
return daoQueryColumnDataList;
|
}
|
|
public void setDaoQueryColumnDataList(List<DaoQueryColumnData> daoQueryColumnDataList) {
|
this.daoQueryColumnDataList = daoQueryColumnDataList;
|
}
|
}
|