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")); } }