package org.yeshi.utils.generater;
|
|
import com.meizu.push.sdk.server.IFlymePush;
|
import org.springframework.data.mongodb.core.mapping.Document;
|
import org.yeshi.utils.FileUtil;
|
import org.yeshi.utils.StringUtil;
|
import org.yeshi.utils.generater.entity.ClassInfo;
|
import org.yeshi.utils.generater.entity.admin.AdminGeneraterInfo;
|
import org.yeshi.utils.generater.mybatis.Table;
|
import org.yeshi.utils.generater.params.AdminGeneraterParams;
|
import org.yeshi.utils.generater.params.DaoGeneraterParams;
|
import org.yeshi.utils.generater.params.ServiceGeneraterParams;
|
import org.yeshi.utils.generater.vo.ExceptionVO;
|
import org.yeshi.utils.generater.vo.admin.controller.AdminControllerInfoVO;
|
import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO;
|
import org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO;
|
import org.yeshi.utils.generater.vo.service.QueryVO;
|
import org.yeshi.utils.generater.vo.service.ServiceImplInfoVO;
|
import org.yeshi.utils.generater.vo.service.ServiceInfoVO;
|
import org.yeshi.utils.mongo.MongodbBaseDao;
|
import org.yeshi.utils.mybatis.BaseMapper;
|
|
import java.io.File;
|
import java.io.IOException;
|
import java.lang.annotation.Annotation;
|
|
/**
|
* @author Administrator
|
* @title: GeneraterManager
|
* @description: 自动化代码生成管理器
|
* @date 2021/10/13 14:48
|
*/
|
|
/**
|
* Title
|
*
|
* @Description //TODO
|
* @Author hxh
|
* @Date 18:11 2021/10/13
|
**/
|
public class GeneraterManager {
|
|
private static GeneraterManager instance;
|
|
private String classRootDir;
|
private Class entity;
|
|
public static GeneraterManager getInstance() {
|
if (instance == null)
|
instance = new GeneraterManager();
|
return instance;
|
}
|
|
//类的根目录
|
public void init(String classRootDir, Class entity) {
|
this.classRootDir = classRootDir;
|
this.entity = entity;
|
}
|
|
//获取文件夹的路径
|
private String getDirPath(String packageName) {
|
File f = new File(classRootDir);
|
if (!f.exists()) {
|
f.mkdirs();
|
}
|
f = new File(f.getAbsolutePath(), packageName.replace(".", "/"));
|
if (!f.exists()) {
|
f.mkdirs();
|
}
|
return f.getAbsolutePath();
|
}
|
|
/**
|
* @return void
|
* @author hxh
|
* @description 保存文件
|
* @date 10:06 2021/10/14
|
* @param: data
|
* @param: path
|
**/
|
private void saveFile(String data, String path) throws IOException {
|
if (!new File(path).exists())
|
new File(path).createNewFile();
|
FileUtil.saveAsFileByte(data.getBytes("UTF-8"), path);
|
}
|
|
public void createException(String packageName, Class base) {
|
String path = getDirPath(packageName);
|
try {
|
ExceptionVO vo = new ExceptionVO.Builder().setEntity(entity).setPackageName(packageName).setBase(new ClassInfo(base.getSimpleName(), base.getName())).build();
|
String result = GeneraterUtil.createException(vo);
|
//保存
|
saveFile(result, path);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* @return org.yeshi.utils.generater.vo.dao.MongoDBDaoVO
|
* @author hxh
|
* @description 自动生成Dao
|
* @date 18:24 2021/10/13
|
* @param: packageName
|
**/
|
public MongoDBDaoVO createDao(String packageName) throws Exception {
|
String daoName = entity.getSimpleName() + "Dao";
|
String path = getDirPath(packageName);
|
MongoDBDaoVO vo = new MongoDBDaoVO.Builder()
|
.setBaseDao(new ClassInfo(MongodbBaseDao.class.getSimpleName(), MongodbBaseDao.class.getName()))
|
.setDao(new ClassInfo(daoName, packageName + "." + daoName))
|
.setEntity(entity).build();
|
String result = GeneraterUtil.createMongoDBDao(vo);
|
//保存
|
saveFile(result, new File(path, daoName + ".java").getAbsolutePath());
|
return vo;
|
}
|
|
/**
|
* @return org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO
|
* @author hxh
|
* @description 自动生成Mapper
|
* @date 18:24 2021/10/13
|
* @param: packageName
|
* @param: mapperDir
|
**/
|
public MyBatisDBDaoVO createMapper(String packageName, String mapperDir) throws Exception {
|
String mapperName = entity.getSimpleName() + "Mapper";
|
String path = getDirPath(packageName);
|
MyBatisDBDaoVO vo = new MyBatisDBDaoVO.Builder()
|
.setBaseMapper(new ClassInfo(BaseMapper.class.getSimpleName(), BaseMapper.class.getName()))
|
.setMapper(new ClassInfo(mapperName, packageName + "." + mapperName))
|
.setEntity(entity)
|
.build();
|
String result = GeneraterUtil.createMybatisDBMapper(vo);
|
//保存
|
saveFile(result, new File(path, mapperName + ".java").getAbsolutePath());
|
if (!new File(mapperDir).exists())
|
new File(mapperDir).mkdirs();
|
result = GeneraterUtil.createMybatisDBMapperXML(vo);
|
saveFile(result, new File(mapperDir, mapperName + ".xml").getAbsolutePath());
|
return vo;
|
}
|
|
/**
|
* @return org.yeshi.utils.generater.vo.service.QueryVO
|
* @author hxh
|
* @description /创建查询Query
|
* @date 18:24 2021/10/13
|
* @param: packageName
|
**/
|
public QueryVO createQuery(String packageName) throws Exception {
|
//创建Query
|
String path = getDirPath(packageName);
|
QueryVO queryVO = new QueryVO.Builder().setEntity(entity).setPackageName(packageName).build();
|
String result = GeneraterUtil.createQuery(queryVO);
|
saveFile(result, new File(path, queryVO.getClassName() + ".java").getAbsolutePath());
|
return queryVO;
|
}
|
|
/**
|
* @return org.yeshi.utils.generater.vo.service.ServiceInfoVO
|
* @author hxh
|
* @description 自动生成服务
|
* @date 18:23 2021/10/13
|
* @param: interPackageName
|
* @param: implPackageName
|
* @param: query
|
* @param: dao
|
**/
|
public ServiceInfoVO createService(String interPackageName, String implPackageName, ClassInfo query, ClassInfo dao) throws Exception {
|
|
|
//创建service接口
|
String serviceName = entity.getSimpleName() + "Service";
|
String path = getDirPath(interPackageName);
|
ServiceInfoVO vo = new ServiceInfoVO.Builder()
|
.setPackageName(interPackageName)
|
.setEntity(entity)
|
.setQuery(query)
|
.setService(new ClassInfo(serviceName, interPackageName + "." + serviceName))
|
.build();
|
String result = GeneraterUtil.createService(vo);
|
saveFile(result, new File(path, serviceName + ".java").getAbsolutePath());
|
|
//创建service实现
|
String serviceImplName = entity.getSimpleName() + "ServiceImpl";
|
path = getDirPath(implPackageName);
|
ServiceImplInfoVO implVO = new ServiceImplInfoVO.Builder()
|
.setDao(dao)
|
.setPackageName(implPackageName)
|
.setEntity(entity)
|
.setQuery(query)
|
.setService(new ClassInfo(serviceName, interPackageName + "." + serviceName))
|
.setDaoQuery(new ClassInfo("DaoQuery", dao.getClazz() + ".DaoQuery"))
|
.build();
|
result = GeneraterUtil.createServiceImpl(implVO);
|
saveFile(result, new File(path, serviceImplName + ".java").getAbsolutePath());
|
return vo;
|
}
|
|
|
/**
|
* @return void
|
* @author hxh
|
* @description 自动生成管理模块
|
* @date 18:23 2021/10/13
|
* @param: controllerPackage
|
* @param: htmlDir
|
* @param: query
|
* @param: service
|
**/
|
public void createAdmin(String controllerPackage, String htmlDir, ClassInfo query, ClassInfo service) throws Exception {
|
String path = getDirPath(controllerPackage);
|
|
|
AdminGeneraterInfo generaterInfo = new AdminGeneraterInfo.Builder().setEntityClass(entity).build();
|
|
|
String htmlNamePrefix = getHtmlNameFromEntityName(entity.getSimpleName());
|
AdminControllerInfoVO vo = new AdminControllerInfoVO.Builder().setAdminInfo(generaterInfo).setPackageName(controllerPackage).setQueryVO(query).setService(service).build();
|
String controllerName = vo.getControllerName();
|
//生成controller
|
String result = GeneraterUtil.createAdminController(vo);
|
saveFile(result, new File(path, controllerName + ".java").getAbsolutePath());
|
|
|
result = GeneraterUtil.createAdminPageForList(generaterInfo);
|
saveFile(result, new File(htmlDir, htmlNamePrefix + "_list.html").getAbsolutePath());
|
|
if (generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0) {
|
result = GeneraterUtil.createAdminPageForAdd(generaterInfo);
|
saveFile(result, new File(htmlDir, htmlNamePrefix + "_add.html").getAbsolutePath());
|
}
|
|
if (generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0) {
|
result = GeneraterUtil.createAdminPageForUpdate(generaterInfo);
|
saveFile(result, new File(htmlDir, htmlNamePrefix + "_update.html").getAbsolutePath());
|
}
|
}
|
|
|
/**
|
* @return void
|
* @author hxh
|
* @description 创建整个功能模块
|
* @date 18:19 2021/10/13
|
* @param: daoParams
|
* @param: serviceParams
|
* @param: adminParams
|
**/
|
public void createWholeFunction(DaoGeneraterParams daoParams, ServiceGeneraterParams serviceParams, AdminGeneraterParams adminParams) throws Exception {
|
Annotation[] as = entity.getAnnotations();
|
int type = -1;
|
for (Annotation a : as) {
|
if (a instanceof Table) {
|
type = 1;
|
break;
|
} else if (a instanceof Document) {
|
type = 2;
|
break;
|
}
|
}
|
if (type == -1) {
|
throw new Exception("实体未配置mybatis或者mongodb");
|
}
|
|
if (daoParams != null) {
|
if (type == 1 && StringUtil.isNullOrEmpty(daoParams.getMapperXMLDir())) {
|
throw new Exception("mybatis xml文件路径为空");
|
}
|
}
|
|
//创建dao
|
ClassInfo daoClass = null;
|
if (daoParams != null) {
|
if (type == 1) {
|
MyBatisDBDaoVO vo = createMapper(daoParams.getDaoPackage(), daoParams.getMapperXMLDir());
|
daoClass = vo.getMapper();
|
} else {
|
MongoDBDaoVO vo = createDao(daoParams.getDaoPackage());
|
daoClass = new ClassInfo(vo.getDaoName(), vo.getPackageName() + "." + vo.getDaoName());
|
}
|
}
|
|
ClassInfo queryClass = null;
|
ClassInfo serviceClass = null;
|
|
if (serviceParams != null) {
|
//创建Query
|
QueryVO queryVO = createQuery(serviceParams.getQueryPackage());
|
queryClass = new ClassInfo(queryVO.getClassName(), queryVO.getPackageName() + "." + queryVO.getClassName());
|
|
//创建service
|
ServiceInfoVO serviceInfoVO = createService(serviceParams.getServiceInterPackage(), serviceParams.getServiceImplPackage(), queryClass, daoClass);
|
serviceClass = serviceInfoVO.getService();
|
}
|
|
if (queryClass != null && serviceClass != null) {
|
if (adminParams != null)
|
//创建Admin模块
|
createAdmin(adminParams.getControllerPackage(), adminParams.getHtmlDir(), queryClass, serviceClass);
|
}
|
}
|
|
/**
|
* @return java.lang.String
|
* @author hxh
|
* @description 通过entity的名称获取html文件的前缀名称
|
* @date 18:25 2021/10/13
|
* @param: entityName
|
**/
|
private static String getHtmlNameFromEntityName(String entityName) {
|
StringBuffer sb = new StringBuffer();
|
StringBuffer buffer = null;
|
for (int i = 0; i < entityName.length(); i++) {
|
if (entityName.charAt(i) >= 65 && entityName.charAt(i) <= 90) {
|
//大写字母
|
if (buffer == null)
|
buffer = new StringBuffer();
|
buffer.append(entityName.charAt(i));
|
} else {
|
if (buffer != null) {
|
sb.append("_" + buffer.toString().toLowerCase());
|
buffer = null;
|
}
|
sb.append(entityName.charAt(i));
|
}
|
}
|
|
if (buffer != null) {
|
sb.append("_" + buffer.toString().toLowerCase());
|
}
|
|
if (sb.charAt(0) == '_')
|
sb = sb.replace(0, 1, "");
|
return sb.toString();
|
}
|
|
|
public static void main(String[] args) {
|
System.out.print(getHtmlNameFromEntityName("TTestEEntity"));
|
}
|
|
|
}
|