src/main/java/org/yeshi/utils/generater/GeneraterManager.java
@@ -10,6 +10,7 @@ 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.util.NameUtil; import org.yeshi.utils.generater.vo.ExceptionVO; import org.yeshi.utils.generater.vo.admin.controller.AdminControllerInfoVO; import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO; @@ -17,6 +18,7 @@ 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.generater.vo.xmlconfig.GenertorConfig; import org.yeshi.utils.mongo.MongodbBaseDao; import org.yeshi.utils.mybatis.BaseMapper; @@ -44,6 +46,7 @@ private String classRootDir; private Class entity; public static GeneraterManager getInstance() { if (instance == null) @@ -104,7 +107,8 @@ * @param: packageName **/ public MongoDBDaoVO createDao(String packageName) throws Exception { String daoName = entity.getSimpleName() + "Dao"; String daoName = NameUtil.getDefaultDaoName(entity); String path = getDirPath(packageName); MongoDBDaoVO vo = new MongoDBDaoVO.Builder() .setBaseDao(new ClassInfo(MongodbBaseDao.class.getSimpleName(), MongodbBaseDao.class.getName())) @@ -125,7 +129,7 @@ * @param: mapperDir **/ public MyBatisDBDaoVO createMapper(String packageName, String mapperDir) throws Exception { String mapperName = entity.getSimpleName() + "Mapper"; String mapperName = NameUtil.getDefaultMapperName(entity); String path = getDirPath(packageName); MyBatisDBDaoVO vo = new MyBatisDBDaoVO.Builder() .setBaseMapper(new ClassInfo(BaseMapper.class.getSimpleName(), BaseMapper.class.getName())) @@ -172,7 +176,7 @@ //创建service接口 String serviceName = entity.getSimpleName() + "Service"; String serviceName = NameUtil.getDefaultServiceName(entity); String path = getDirPath(interPackageName); ServiceInfoVO vo = new ServiceInfoVO.Builder() .setPackageName(interPackageName) @@ -184,7 +188,7 @@ saveFile(result, new File(path, serviceName + ".java").getAbsolutePath()); //创建service实现 String serviceImplName = entity.getSimpleName() + "ServiceImpl"; String serviceImplName = NameUtil.getDefaultServiceImplName(entity); path = getDirPath(implPackageName); ServiceImplInfoVO implVO = new ServiceImplInfoVO.Builder() .setDao(dao) src/main/java/org/yeshi/utils/generater/GeneraterManagerV2.java
New file @@ -0,0 +1,391 @@ package org.yeshi.utils.generater; 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.util.NameUtil; 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.generater.vo.xmlconfig.GenertorConfig; 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: 自动化代码生成管理器(采用解析xml配置文件的形式) * @date 2021/10/13 14:48 */ /** * Title * * @Description //TODO * @Author hxh * @Date 18:11 2021/10/13 **/ public class GeneraterManagerV2 { private static GeneraterManagerV2 instance; private String classRootDir; private GenertorConfig config; public static GeneraterManagerV2 getInstance() { if (instance == null) instance = new GeneraterManagerV2(); return instance; } public void init(String classRootDir, GenertorConfig config) { this.classRootDir = classRootDir; this.config = config; } //获取文件夹的路径 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(Class base) throws Exception { if (config.getService().getException() == null) { throw new Exception("尚未配置异常信息"); } String path = getDirPath(config.getService().getException().getPkg()); try { ExceptionVO vo = new ExceptionVO.Builder().setEntity(config.getEntity()).setPackageName(config.getService().getException().getPkg()).setBase(new ClassInfo(base.getSimpleName(), base.getName())).build(); String result = GeneraterUtil.createException(vo); //保存 saveFile(result, path); } catch (Exception e) { e.printStackTrace(); } } public void createDao() throws Exception { Annotation[] as = config.getEntity().getAnnotations(); for (Annotation a : as) { if (a instanceof Table) { createMapper(); break; } else if (a instanceof Document) { createMongoDBDao(); break; } } } /** * @return org.yeshi.utils.generater.vo.dao.MongoDBDaoVO * @author hxh * @description 自动生成Dao * @date 18:24 2021/10/13 * @param: packageName **/ public MongoDBDaoVO createMongoDBDao() throws Exception { if (config.getDao() == null) { throw new Exception("尚未配置Dao信息"); } String daoName = NameUtil.getDefaultDaoName(config.getEntity()); String path = getDirPath(config.getDao().getPkg()); MongoDBDaoVO vo = new MongoDBDaoVO.Builder() .setBaseDao(new ClassInfo(MongodbBaseDao.class.getSimpleName(), MongodbBaseDao.class.getName())) .setDao(new ClassInfo(daoName, config.getDao().getPkg() + "." + daoName)) .setEntity(config.getEntity()).setDaoData(config.getDao()).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() throws Exception { if (config.getDao() == null) { throw new Exception("尚未配置Dao信息"); } if (StringUtil.isNullOrEmpty(config.getDao().getMapperDir())) { throw new Exception("Mapper存放目录为空"); } String mapperName = NameUtil.getDefaultMapperName(config.getEntity()); String path = getDirPath(config.getDao().getPkg()); MyBatisDBDaoVO vo = new MyBatisDBDaoVO.Builder() .setBaseMapper(new ClassInfo(BaseMapper.class.getSimpleName(), BaseMapper.class.getName())) .setMapper(new ClassInfo(mapperName, config.getDao().getPkg() + "." + mapperName)) .setEntity(config.getEntity()) .setDaoData(config.getDao()) .build(); String result = GeneraterUtil.createMybatisDBMapper(vo); //保存 saveFile(result, new File(path, mapperName + ".java").getAbsolutePath()); if (!new File(config.getDao().getMapperDir()).exists()) new File(config.getDao().getMapperDir()).mkdirs(); result = GeneraterUtil.createMybatisDBMapperXML(vo); saveFile(result, new File(config.getDao().getMapperDir(), 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(config.getEntity()).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(ClassInfo dao) throws Exception { if (config.getService() == null) { throw new Exception("尚未配置service"); } if (config.getDao() == null && dao == null) { throw new Exception("请在xml中配置Dao,或者传入Dao信息"); } if (dao == null) { if (StringUtil.isNullOrEmpty(config.getDao().getMapperDir())) { String daoName = NameUtil.getDefaultDaoName(config.getEntity()); dao = new ClassInfo(daoName, config.getDao().getPkg() + "." + daoName); } else { String daoName = NameUtil.getDefaultMapperName(config.getEntity()); dao = new ClassInfo(daoName, config.getDao().getPkg() + "." + daoName); } } QueryVO queryVO = createQuery(config.getService().getQueryPackage()); ClassInfo query = new ClassInfo(queryVO.getClassName(), queryVO.getPackageName() + "." + queryVO.getClassName()); //创建service接口 String serviceName = NameUtil.getDefaultServiceName(config.getEntity()); String path = getDirPath(config.getService().getInterPackage()); ServiceInfoVO vo = new ServiceInfoVO.Builder() .setPackageName(config.getService().getInterPackage()) .setEntity(config.getEntity()) .setQuery(query) .setService(new ClassInfo(serviceName, config.getService().getInterPackage() + "." + serviceName)) .build(); String result = GeneraterUtil.createService(vo); saveFile(result, new File(path, serviceName + ".java").getAbsolutePath()); //创建service实现 String serviceImplName = NameUtil.getDefaultServiceImplName(config.getEntity()); path = getDirPath(config.getService().getImplPackage()); ServiceImplInfoVO implVO = new ServiceImplInfoVO.Builder() .setDao(dao) .setPackageName(config.getService().getImplPackage()) .setEntity(config.getEntity()) .setQuery(query) .setService(new ClassInfo(serviceName, config.getService().getInterPackage() + "." + 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(ClassInfo query, ClassInfo service) throws Exception { if (config.getAdmin() == null) { throw new Exception("尚未配置admin"); } if (service == null) { if (config.getService() == null) { throw new Exception("请传入service或者在xml中配置service"); } String serviceName = NameUtil.getDefaultServiceName(config.getEntity()); service = new ClassInfo(serviceName, config.getService().getInterPackage() + "." + serviceName); } if (query == null) { if (config.getService() == null) { throw new Exception("请传入service或者在xml中配置service"); } String queryName = NameUtil.getDefaultQueryName(config.getEntity()); query = new ClassInfo(queryName, config.getService().getQueryPackage() + "." + queryName); } String path = getDirPath(config.getAdmin().getController().getPkg()); AdminGeneraterInfo generaterInfo = new AdminGeneraterInfo.Builder().setEntityClass(config.getEntity()).setAdminData(config.getAdmin()).build(); AdminControllerInfoVO vo = new AdminControllerInfoVO.Builder().setAdminInfo(generaterInfo).setPackageName(generaterInfo.getControllerData().getPkg()).setQueryVO(query).setService(service).build(); String controllerName = vo.getControllerName(); //生成controller String result = GeneraterUtil.createAdminController(vo); saveFile(result, new File(path, controllerName + ".java").getAbsolutePath()); if (!new File(generaterInfo.getPageDir()).exists()) { new File(generaterInfo.getPageDir()).mkdirs(); } String htmlNamePrefix = getHtmlNameFromEntityName(config.getEntity().getSimpleName()); if (generaterInfo.getShowDataList() != null && generaterInfo.getShowDataList().size() > 0) { result = GeneraterUtil.createAdminPageForList(generaterInfo); saveFile(result, new File(generaterInfo.getPageDir(), generaterInfo.getListFileName() != null ? generaterInfo.getListFileName() : htmlNamePrefix + "_list.html").getAbsolutePath()); } if (config.getAdmin().getPages().getAdd() != null && generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0) { result = GeneraterUtil.createAdminPageForAdd(generaterInfo); saveFile(result, new File(generaterInfo.getPageDir(), generaterInfo.getAddFileName() != null ? generaterInfo.getAddFileName() : htmlNamePrefix + "_add.html").getAbsolutePath()); } if (config.getAdmin().getPages().getUpdate() != null && generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0) { result = GeneraterUtil.createAdminPageForUpdate(generaterInfo); saveFile(result, new File(generaterInfo.getPageDir(), generaterInfo.getUpdateFileName() != null ? generaterInfo.getUpdateFileName() : htmlNamePrefix + "_update.html").getAbsolutePath()); } } /** * @return void * @author hxh * @description 创建整个功能模块 * @date 18:19 2021/10/13 * @param: daoParams * @param: serviceParams * @param: adminParams **/ public void createWholeFunction() throws Exception { Annotation[] as = config.getEntity().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"); } createDao(); createService(null); createAdmin(null, null); } /** * @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")); } } src/main/java/org/yeshi/utils/generater/TestEntity3.java
New file @@ -0,0 +1,91 @@ package org.yeshi.utils.generater; import org.springframework.data.annotation.Id; import org.yeshi.utils.generater.mybatis.Column; import org.yeshi.utils.generater.mybatis.Table; import java.util.Date; /** * @author Administrator * @title: TestEntity * @description: 测试entity * @date 2021/9/23 14:22 */ @Table("table_test") public class TestEntity3 { @Id private String id; @Column(name = "nick_name") private String nickName; private Integer type; private Integer sex; private String portrait; private String province; private Date createTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public String getPortrait() { return portrait; } public void setPortrait(String portrait) { this.portrait = portrait; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } } src/main/java/org/yeshi/utils/generater/entity/admin/AdminGeneraterInfo.java
@@ -1,11 +1,18 @@ package org.yeshi.utils.generater.entity.admin; import org.yeshi.utils.generater.annotation.admin.AdminController; import org.yeshi.utils.generater.annotation.admin.form.*; import org.yeshi.utils.generater.entity.KeyValue; import org.yeshi.utils.generater.util.AnotationUtil; import org.yeshi.utils.generater.vo.xmlconfig.admin.AdminControllerData; import org.yeshi.utils.generater.vo.xmlconfig.admin.AdminData; import org.yeshi.utils.generater.vo.xmlconfig.admin.ColumnData; import org.yeshi.utils.generater.vo.xmlconfig.admin.SearchFormData; import org.yeshi.utils.generater.vo.xmlconfig.admin.form.*; import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent; import java.lang.annotation.Annotation; import java.util.List; import java.util.Map; import java.util.*; /** * @author Administrator @@ -18,7 +25,7 @@ //entity类 private Class entity; //controller注解对象 private AdminController controllerData; private AdminControllerData controllerData; //修改的表单行数据 private List<FormRowData> updateFormRows; //添加的表单行数据 @@ -28,6 +35,24 @@ private List<Map<String, Object>> showDataList; private String title; private String pageDir; private String listFileName; private String addFileName; private String updateFileName; private boolean delete; private boolean add; private boolean edit; public String getPageDir() { return pageDir; } public void setPageDir(String pageDir) { this.pageDir = pageDir; } public Class getEntity() { return entity; @@ -37,11 +62,11 @@ this.entity = entity; } public AdminController getControllerData() { public AdminControllerData getControllerData() { return controllerData; } public void setControllerData(AdminController controllerData) { public void setControllerData(AdminControllerData controllerData) { this.controllerData = controllerData; } @@ -77,13 +102,75 @@ this.showDataList = showDataList; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getListFileName() { return listFileName; } public void setListFileName(String listFileName) { this.listFileName = listFileName; } public String getAddFileName() { return addFileName; } public void setAddFileName(String addFileName) { this.addFileName = addFileName; } public String getUpdateFileName() { return updateFileName; } public void setUpdateFileName(String updateFileName) { this.updateFileName = updateFileName; } public boolean isDelete() { return delete; } public void setDelete(boolean delete) { this.delete = delete; } public boolean isAdd() { return add; } public void setAdd(boolean add) { this.add = add; } public boolean isEdit() { return edit; } public void setEdit(boolean edit) { this.edit = edit; } public static class Builder { private Class entity; private AdminData adminData; public Builder setEntityClass(Class clazz) { this.entity = clazz; return this; } public Builder setAdminData(AdminData adminData) { this.adminData = adminData; return this; } @@ -91,24 +178,180 @@ if (entity == null) { throw new Exception("尚未设置entity"); } //查询是否需要生成管理界面与controller Annotation[] ans = entity.getAnnotations(); for (Annotation an : ans) { if (an instanceof AdminController) { Class searchFormClass = ((AdminController) an).searchForm(); AdminGeneraterInfo info = new AdminGeneraterInfo(); info.setEntity(entity); info.setControllerData((AdminController) an); info.setSearchFormRows(AnotationUtil.getFormRowData(searchFormClass)); info.setAddFormRows(AnotationUtil.getFormRowData(entity)); info.setUpdateFormRows(AnotationUtil.getUpdateFormRowData(entity)); info.setShowDataList(AnotationUtil.getShowDataList(entity)); return info; if (adminData != null) { //xml配置文件方式生成 AdminGeneraterInfo info = new AdminGeneraterInfo(); info.setEntity(entity); info.setControllerData(adminData.getController()); info.setTitle(adminData.getPages().getTitle()); info.setPageDir(adminData.getPages().getPageDir()); info.setEdit(adminData.getPages().getList().isEdit()); info.setDelete(adminData.getPages().getList().isDelete()); info.setAdd(adminData.getPages().getAdd() != null); if (adminData.getPages().getList() != null) { info.setListFileName(adminData.getPages().getList().getFileName()); if (adminData.getPages().getList().getSearchForm() != null) { List<FormRowData> searchFormList = new ArrayList<>(); for (ColumnData columnData : adminData.getPages().getList().getSearchForm().getColumns()) { FormRowData rowData = getFormRowData(columnData); searchFormList.add(rowData); } info.setSearchFormRows(searchFormList); } List<Map<String, Object>> showList = new ArrayList<>(); for (ColumnData columnData : adminData.getPages().getList().getColumns()) { Map<String, Object> map = new HashMap<>(); map.put("identifier", columnData.getProperty()); map.put("title", columnData.getTitle()); map.put("order", columnData.getOrder()); map.put("imgWidth", columnData.getImgWidth()); map.put("imgHeight", columnData.getImgHeight()); map.put("showType", columnData.getShowType().name()); showList.add(map); } Comparator<Map<String, Object>> cm = (Map<String, Object> o1, Map<String, Object> o2) -> { return (int) (o1.get("order")) - (int) (o2.get("order")); }; Collections.sort(showList, cm); info.setShowDataList(showList); } if (adminData.getPages().getAdd() != null) { info.setAddFileName(adminData.getPages().getAdd().getFileName()); List<FormRowData> rowList = new ArrayList<>(); for (ColumnData columnData : adminData.getPages().getAdd().getColumns()) { FormRowData rowData = getFormRowData(columnData); rowList.add(rowData); } info.setAddFormRows(rowList); } if (adminData.getPages().getUpdate() != null) { info.setUpdateFileName(adminData.getPages().getUpdate().getFileName()); List<FormRowData> rowList = new ArrayList<>(); for (ColumnData columnData : adminData.getPages().getUpdate().getColumns()) { FormRowData rowData = getFormRowData(columnData); rowList.add(rowData); } info.setUpdateFormRows(rowList); } return info; } else { //注解方式生成 //查询是否需要生成管理界面与controller Annotation[] ans = entity.getAnnotations(); for (Annotation an : ans) { if (an instanceof AdminController) { Class searchFormClass = ((AdminController) an).searchForm(); AdminGeneraterInfo info = new AdminGeneraterInfo(); info.setEntity(entity); AdminControllerData adminControllerData = new AdminControllerData(); AdminController adminController = (AdminController) an; adminControllerData.setMapping(adminController.mapping()); adminControllerData.setResponseBody(true); adminControllerData.setPkg(null); adminControllerData.setJsonp(false); info.setEdit(adminController.edit()); info.setDelete(adminController.delete()); info.setAdd(true); info.setControllerData(adminControllerData); info.setSearchFormRows(AnotationUtil.getFormRowData(searchFormClass)); info.setAddFormRows(AnotationUtil.getFormRowData(entity)); info.setUpdateFormRows(AnotationUtil.getUpdateFormRowData(entity)); info.setShowDataList(AnotationUtil.getShowDataList(entity)); return info; } } } return null; } private FormRowData getFormRowData(ColumnData columnData) { FormRowData rowData = new FormRowData(); rowData.setKey(columnData.getProperty()); FormComponent component = columnData.getComponent(); Map<String, Object> params = new HashMap<>(); params.put("desc", component.getDesc()); params.put("disable", !component.isEnable()); params.put("title", columnData.getTitle()); if (component instanceof FormComponentText) { rowData.setType(Text.class.getSimpleName()); FormComponentText formComponentText = (FormComponentText) component; params.put("dateFormat", formComponentText.getDateFormat()); params.put("inputType", formComponentText.getInputType().name()); params.put("maxLength", formComponentText.getMaxLength() == null ? -1 : formComponentText.getMaxLength()); params.put("minLength", formComponentText.getMinLength() == null ? -1 : formComponentText.getMinLength()); params.put("placeHolder", formComponentText.getPlaceHolder()); if (formComponentText.getVerify() != null) { params.put("require", formComponentText.getVerify().isRequire()); params.put("verifyType", formComponentText.getVerify().getType()); params.put("verifyValue", formComponentText.getVerify().getExpress()); params.put("verifyNotifyMsg", formComponentText.getVerify().getNotify()); } } else if (component instanceof FormComponentRadioGroup) { rowData.setType(RadioGroup.class.getSimpleName()); FormComponentRadioGroup formComponentRadioGroup = (FormComponentRadioGroup) component; Map<String, Object> map = formComponentRadioGroup.getValues(); List<KeyValue> list = new ArrayList<>(); for (Iterator<String> its = map.keySet().iterator(); its.hasNext(); ) { String key = its.next(); list.add(new KeyValue(key, map.get(key) + "")); } params.put("values", list); } else if (component instanceof FormComponentImg) { rowData.setType(Img.class.getSimpleName()); FormComponentImg formComponentImg = (FormComponentImg) component; params.put("width", formComponentImg.getWidth() == null ? -1 : formComponentImg.getWidth()); params.put("height", formComponentImg.getHeight() == null ? -1 : formComponentImg.getHeight()); params.put("uploadApi", formComponentImg.getApi().getPath()); if (formComponentImg.getApi().getParams() != null) { List<KeyValue> list = new ArrayList<>(); for (Iterator<String> its = formComponentImg.getApi().getParams().keySet().iterator(); its.hasNext(); ) { String key = its.next(); list.add(new KeyValue(key, formComponentImg.getApi().getParams().get(key) + "")); } params.put("uploadApiParams", list); } } else if (component instanceof FormComponentSwitch) { rowData.setType(Switch.class.getSimpleName()); } else if (component instanceof FormComponentSelect) { rowData.setType(Select.class.getSimpleName()); FormComponentSelect formComponentSelect = (FormComponentSelect) component; if (formComponentSelect.getApi() != null) { params.put("apiPath", formComponentSelect.getApi().getPath()); List<KeyValue> list = new ArrayList<>(); for (Iterator<String> its = formComponentSelect.getApi().getParams().keySet().iterator(); its.hasNext(); ) { String key = its.next(); list.add(new KeyValue(key, formComponentSelect.getApi().getParams().get(key) + "")); } params.put("apiParams", list); } if (formComponentSelect.getValues() != null) { List<KeyValue> list = new ArrayList<>(); for (Iterator<String> its = formComponentSelect.getValues().keySet().iterator(); its.hasNext(); ) { String key = its.next(); list.add(new KeyValue(key, formComponentSelect.getValues().get(key) + "")); } params.put("values", list); } } rowData.setParams(params); return rowData; } } src/main/java/org/yeshi/utils/generater/util/NameUtil.java
New file @@ -0,0 +1,32 @@ package org.yeshi.utils.generater.util; /** * @author hxh * @title: NameUtil * @description: 取名工具类 * @date 2022/3/29 15:59 */ public class NameUtil { public static String getDefaultDaoName(Class entity) { return entity.getSimpleName() + "Dao"; } public static String getDefaultMapperName(Class entity) { return entity.getSimpleName() + "Mapper"; } public static String getDefaultServiceName(Class entity) { return entity.getSimpleName() + "Service"; } public static String getDefaultQueryName(Class entity) { return entity.getSimpleName() + "Query"; } public static String getDefaultServiceImplName(Class entity) { return entity.getSimpleName() + "ServiceImpl"; } } src/main/java/org/yeshi/utils/generater/vo/admin/controller/AdminControllerInfoVO.java
@@ -19,6 +19,8 @@ private ClassInfo service; private ClassInfo query; private boolean jsonp; private boolean responseBody; //主键类型 private String identifyIdType; @@ -38,6 +40,8 @@ private ClassInfo query; // private ClassInfo service; private boolean responseBody; public Builder setAdminInfo(AdminGeneraterInfo generaterInfo) { @@ -60,6 +64,11 @@ return this; } public Builder setResponseBody(boolean responseBody) { this.responseBody = responseBody; return this; } public AdminControllerInfoVO build() throws Exception { if (generaterInfo == null) { throw new Exception("generaterInfo不能为空"); @@ -75,15 +84,16 @@ } AdminControllerInfoVO vo = new AdminControllerInfoVO(); vo.setMapping(generaterInfo.getControllerData().mapping()); vo.setMapping(generaterInfo.getControllerData().getMapping()); vo.setEntity(new ClassInfo(generaterInfo.getEntity().getSimpleName(), generaterInfo.getEntity().getName())); vo.setJsonp(generaterInfo.getControllerData().jsonp()); vo.setJsonp(generaterInfo.getControllerData().isJsonp()); vo.setPackageName(packageName); vo.setQueryVO(query); vo.setService(service); vo.setAdd(generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0); vo.setUpdate(generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0 && generaterInfo.getControllerData().edit()); vo.setDelete(generaterInfo.getControllerData().delete()); vo.setUpdate(generaterInfo.getUpdateFormRows() != null && generaterInfo.getUpdateFormRows().size() > 0 ); vo.setDelete(true); vo.setResponseBody(generaterInfo.getControllerData().isResponseBody()); vo.setIdentifyIdType(EntityUtil.getIdentifyId(generaterInfo.getEntity()).getType().getSimpleName()); vo.setControllerName(vo.getEntity().getName() + "AdminController"); @@ -184,4 +194,12 @@ public void setDelete(boolean delete) { this.delete = delete; } public boolean isResponseBody() { return responseBody; } public void setResponseBody(boolean responseBody) { this.responseBody = responseBody; } } src/main/java/org/yeshi/utils/generater/vo/admin/page/FormAddInfoVO.java
@@ -40,9 +40,9 @@ public FormAddInfoVO build() { FormAddInfoVO vo = new FormAddInfoVO(); vo.setAddApi(generaterInfo.getControllerData().mapping() + "/add"); vo.setAddApi(generaterInfo.getControllerData().getMapping() + "/add"); vo.setRowsList(generaterInfo.getAddFormRows()); vo.setTitle("新增" + generaterInfo.getControllerData().title()); vo.setTitle("新增" + generaterInfo.getTitle()); //遍历需要正则表达式的Text或者TextArea List<FormInputRegexVerifyVO> verifyVOList = new ArrayList<>(); for (FormRowData row : vo.getRowsList()) { src/main/java/org/yeshi/utils/generater/vo/admin/page/FormUpdateInfoVO.java
@@ -41,10 +41,10 @@ public FormUpdateInfoVO build() { FormUpdateInfoVO vo = new FormUpdateInfoVO(); vo.setUpdateApi(generaterInfo.getControllerData().mapping() + "/update"); vo.setDetailApi(generaterInfo.getControllerData().mapping() + "/get"); vo.setUpdateApi(generaterInfo.getControllerData().getMapping() + "/update"); vo.setDetailApi(generaterInfo.getControllerData().getMapping() + "/get"); vo.setRowsList(generaterInfo.getUpdateFormRows()); vo.setTitle("修改" + generaterInfo.getControllerData().title()); vo.setTitle("修改" + generaterInfo.getTitle()); //遍历需要正则表达式的Text或者TextArea List<FormInputRegexVerifyVO> verifyVOList = new ArrayList<>(); for (FormRowData row : vo.getRowsList()) { src/main/java/org/yeshi/utils/generater/vo/admin/page/ListInfoVO.java
@@ -51,7 +51,7 @@ public ListInfoVO build() { ListInfoVO vo = new ListInfoVO(); vo.setListApi(generaterInfo.getControllerData().mapping() + "/list"); vo.setListApi(generaterInfo.getControllerData().getMapping() + "/list"); if (generaterInfo.getAddFormRows() != null && generaterInfo.getAddFormRows().size() > 0) { vo.setAddPagePath(generaterInfo.getEntity().getSimpleName().toLowerCase() + "_add.html"); } @@ -61,10 +61,10 @@ } vo.setSearchFormRows(generaterInfo.getSearchFormRows()); vo.setShowFileds(generaterInfo.getShowDataList()); vo.setTitle(generaterInfo.getControllerData().title()); vo.setTitle(generaterInfo.getTitle()); if (generaterInfo.getControllerData().delete()) { vo.setDeleteApi(generaterInfo.getControllerData().mapping() + "/delete"); if (generaterInfo.isDelete()) { vo.setDeleteApi(generaterInfo.getControllerData().getMapping() + "/delete"); } //遍历需要正则表达式的Text或者TextArea @@ -132,6 +132,9 @@ if (layVerify.endsWith("|")) layVerify = layVerify.substring(0, layVerify.length() - 1); //重新赋值,表单中直接取值 if (row.getParams() == null) { row.setParams(new HashMap<>()); } row.getParams().put("verifyValue", layVerify); } src/main/java/org/yeshi/utils/generater/vo/dao/MongoDBDaoVO.java
@@ -5,6 +5,8 @@ import org.yeshi.utils.StringUtil; import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; import org.yeshi.utils.generater.entity.*; import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData; import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoQuery; import java.lang.annotation.Annotation; import java.lang.reflect.Field; @@ -31,6 +33,8 @@ private Class entity; private ClassInfo dao; private DaoData daoData; public Builder setBaseDao(ClassInfo baseDao) { this.baseDao = baseDao; return this; @@ -43,6 +47,11 @@ public Builder setDao(ClassInfo dao) { this.dao = dao; return this; } public Builder setDaoData(DaoData daoData) { this.daoData = daoData; return this; } @@ -95,16 +104,34 @@ } //获取查询条件 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())); if (daoData != null) { //查询条件从外部传入 for (DaoQuery query : daoData.getQueryList()) { if (query.getName().equalsIgnoreCase(columName)) { 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(), query.getQueryType())); } } break; } } else { //根据注解设置的查询条件 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; } } } src/main/java/org/yeshi/utils/generater/vo/dao/MyBatisDBDaoVO.java
@@ -9,6 +9,8 @@ import org.yeshi.utils.generater.mybatis.ColumnParseUtil; import org.yeshi.utils.generater.mybatis.Table; import org.yeshi.utils.generater.vo.ExceptionVO; import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData; import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoQuery; import java.lang.annotation.Annotation; import java.lang.reflect.Field; @@ -28,11 +30,13 @@ private List<DaoQueryColumnData> queryList; private String table; public static class Builder { private ClassInfo baseMapper; private Class entity; private ClassInfo mapper; private DaoData daoData; public Builder setBaseMapper(ClassInfo baseMapper) { this.baseMapper = baseMapper; @@ -46,6 +50,11 @@ public Builder setMapper(ClassInfo mapper) { this.mapper = mapper; return this; } public Builder setDaoData(DaoData daoData) { this.daoData = daoData; return this; } @@ -133,16 +142,31 @@ columlist.add(columData); //获取查询条件 for (Annotation a : as) { if (a instanceof DaoQueryCondition) { if (fd.getType().getSimpleName().equalsIgnoreCase("Date")) { daoQueryColumnList.add(new DaoQueryColumnData("max" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.lt)); daoQueryColumnList.add(new DaoQueryColumnData("min" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.gte)); } else { daoQueryColumnList.add(new DaoQueryColumnData(columData.getProperty(), columData, fd.getType().getSimpleName(), ((DaoQueryCondition) a).queryType())); if (daoData != null) { //查询条件从外部传入 for (DaoQuery query : daoData.getQueryList()) { if (query.getName().equalsIgnoreCase(columData.getProperty())) { if (fd.getType().getSimpleName().equalsIgnoreCase("Date")) { daoQueryColumnList.add(new DaoQueryColumnData("max" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.lt)); daoQueryColumnList.add(new DaoQueryColumnData("min" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.gte)); } else { daoQueryColumnList.add(new DaoQueryColumnData(columData.getProperty(), columData, fd.getType().getSimpleName(), query.getQueryType())); } } break; } } else { //获取注解查询条件 for (Annotation a : as) { if (a instanceof DaoQueryCondition) { if (fd.getType().getSimpleName().equalsIgnoreCase("Date")) { daoQueryColumnList.add(new DaoQueryColumnData("max" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.lt)); daoQueryColumnList.add(new DaoQueryColumnData("min" + StringUtil.firstCharToUpper(columData.getProperty()), columData, fd.getType().getSimpleName(), DaoQueryCondition.QueryType.gte)); } else { daoQueryColumnList.add(new DaoQueryColumnData(columData.getProperty(), columData, fd.getType().getSimpleName(), ((DaoQueryCondition) a).queryType())); } break; } } } } src/main/java/org/yeshi/utils/generater/vo/service/QueryVO.java
@@ -2,6 +2,7 @@ import org.yeshi.utils.generater.entity.BaseData; import org.yeshi.utils.generater.util.EntityUtil; import org.yeshi.utils.generater.util.NameUtil; import java.lang.reflect.Field; @@ -41,7 +42,7 @@ } QueryVO vo = new QueryVO(); vo.setPackageName(packageName); vo.setClassName(entity.getSimpleName() + "Query"); vo.setClassName(NameUtil.getDefaultQueryName(entity)); return vo; } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/GenertorConfig.java
New file @@ -0,0 +1,50 @@ package org.yeshi.utils.generater.vo.xmlconfig; import org.yeshi.utils.generater.vo.xmlconfig.admin.AdminData; import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData; import org.yeshi.utils.generater.vo.xmlconfig.service.ServiceData; /** * @author hxh * @title: GenertorConfig * @description: xml映射的数据解析结果 * @date 2022/3/28 11:53 */ public class GenertorConfig { private Class entity; private DaoData dao; private ServiceData service; private AdminData admin; public Class getEntity() { return entity; } public void setEntity(Class entity) { this.entity = entity; } public DaoData getDao() { return dao; } public void setDao(DaoData dao) { this.dao = dao; } public ServiceData getService() { return service; } public void setService(ServiceData service) { this.service = service; } public AdminData getAdmin() { return admin; } public void setAdmin(AdminData admin) { this.admin = admin; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/XmlConfigParseUtil.java
New file @@ -0,0 +1,425 @@ package org.yeshi.utils.generater.vo.xmlconfig; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import org.yeshi.utils.generater.GeneraterManagerV2; import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; import org.yeshi.utils.generater.annotation.admin.Show; import org.yeshi.utils.generater.annotation.admin.form.Text; import org.yeshi.utils.generater.entity.admin.FormVerifyType; import org.yeshi.utils.generater.vo.xmlconfig.admin.*; import org.yeshi.utils.generater.vo.xmlconfig.admin.form.*; import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData; import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent; import org.yeshi.utils.generater.vo.xmlconfig.base.VerifyData; import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoData; import org.yeshi.utils.generater.vo.xmlconfig.dao.DaoQuery; import org.yeshi.utils.generater.vo.xmlconfig.service.ExceptionData; import org.yeshi.utils.generater.vo.xmlconfig.service.ServiceData; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author hxh * @title: XmlConfigParseUtil * @description: xml配置文件解析工具类 * @date 2022/3/28 15:02 */ public class XmlConfigParseUtil { public static GenertorConfig parse(InputStream inputStream) throws IOException, ParserConfigurationException, SAXException, ClassNotFoundException { if (inputStream == null) { throw new FileNotFoundException(); } GenertorConfig genertorConfig = new GenertorConfig(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document root = builder.parse(inputStream); NodeList nodelist = root.getElementsByTagName("generator-config"); Node rootNode = nodelist.item(0); String clazz = rootNode.getAttributes().getNamedItem("class").getNodeValue(); genertorConfig.setEntity(Class.forName(clazz)); nodelist = rootNode.getChildNodes(); for (int i = 0; i < nodelist.getLength(); i++) { Node node = nodelist.item(i); switch (node.getNodeName()) { case "dao": { genertorConfig.setDao(parseDao(node)); } break; case "service": { genertorConfig.setService(parseService(node)); } break; case "admin": { genertorConfig.setAdmin(parseAdmin(node)); } break; } } return genertorConfig; } private static DaoData parseDao(Node node) { DaoData daoData = new DaoData(); daoData.setPkg(node.getAttributes().getNamedItem("package").getNodeValue()); daoData.setMapperDir(getNodeAttributeValue(node, "mapperDir")); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { if (nodeList.item(i).getNodeName().equalsIgnoreCase("queryList")) { nodeList = nodeList.item(i).getChildNodes(); List<DaoQuery> queryList = new ArrayList<>(); for (int j = 0; j < nodeList.getLength(); j++) { Node node1 = nodeList.item(j); if (node1.getNodeName().equalsIgnoreCase("query")) { DaoQuery daoQuery = new DaoQuery(); daoQuery.setName(getNodeAttributeValue(node1, "name")); daoQuery.setQueryType(DaoQueryCondition.QueryType.valueOf(getNodeAttributeValue(node1, "type"))); queryList.add(daoQuery); } } daoData.setQueryList(queryList); break; } } return daoData; } private static ServiceData parseService(Node node) { ServiceData data = new ServiceData(); data.setInterPackage(getNodeAttributeValue(node, "interPackage")); data.setImplPackage(getNodeAttributeValue(node, "implPackage")); data.setQueryPackage(getNodeAttributeValue(node, "queryPackage")); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { if (nodeList.item(i).getNodeName().equalsIgnoreCase("exception")) { ExceptionData exceptionData = new ExceptionData(); exceptionData.setPkg(getNodeAttributeValue(nodeList.item(i), "package")); exceptionData.setName(getNodeAttributeValue(nodeList.item(i), "name")); data.setException(exceptionData); break; } } return data; } private static AdminData parseAdmin(Node node) { AdminData adminData = new AdminData(); //解析page数据 NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { switch (nodeList.item(i).getNodeName()) { case "pages": { Node node1 = nodeList.item(i); AdminPageData adminPageData = new AdminPageData(); adminPageData.setTitle(getNodeAttributeValue(node1, "title")); adminPageData.setPageDir(getNodeAttributeValue(node1, "pageDir")); NodeList nodeList1 = node1.getChildNodes(); for (int i1 = 0; i1 < nodeList1.getLength(); i1++) { Node node2 = nodeList1.item(i1); switch (node2.getNodeName()) { case "list": { ListPageData listPageData = new ListPageData(); listPageData.setDelete(Boolean.parseBoolean(getNodeAttributeValue(node2, "delete"))); listPageData.setEdit(Boolean.parseBoolean(getNodeAttributeValue(node2, "edit"))); listPageData.setPage(Boolean.parseBoolean(getNodeAttributeValue(node2, "page"))); listPageData.setFileName(getNodeAttributeValue(node2, "fileName")); NodeList nodeList2 = node2.getChildNodes(); for (int i2 = 0; i2 < nodeList2.getLength(); i2++) { Node node3 = nodeList2.item(i2); if (node3.getNodeName().equalsIgnoreCase("searchForm")) { SearchFormData searchFormData = new SearchFormData(); NodeList nodeList3 = node3.getChildNodes(); for (int i3 = 0; i3 < nodeList3.getLength(); i3++) { if (nodeList3.item(i3).getNodeName().equalsIgnoreCase("columns")) { searchFormData.setColumns(parseColumns(nodeList3.item(i3))); break; } } searchFormData.setPkg(getNodeAttributeValue(node3, "package")); searchFormData.setName(getNodeAttributeValue(node3, "name")); listPageData.setSearchForm(searchFormData); } else if (node3.getNodeName().equalsIgnoreCase("columns")) { listPageData.setColumns(parseColumns(node3)); } } adminPageData.setList(listPageData); } break; case "add": { AddPageData addPageData = new AddPageData(); addPageData.setColumns(parseColumns(node2)); addPageData.setApi(null); addPageData.setFileName(getNodeAttributeValue(node2, "fileName")); adminPageData.setAdd(addPageData); } break; case "update": { UpdatePageData updatePageData = new UpdatePageData(); updatePageData.setColumns(parseColumns(node2)); updatePageData.setApi(null); updatePageData.setFileName(getNodeAttributeValue(node2, "fileName")); adminPageData.setUpdate(updatePageData); } break; } } adminData.setPages(adminPageData); } break; case "controller": { Node node1 = nodeList.item(i); AdminControllerData adminControllerData = new AdminControllerData(); adminControllerData.setJsonp(Boolean.parseBoolean(getNodeAttributeValue(node1, "jsonp"))); adminControllerData.setMapping(getNodeAttributeValue(node1, "mapping")); adminControllerData.setName(getNodeAttributeValue(node1, "name")); adminControllerData.setPkg(getNodeAttributeValue(node1, "package")); adminControllerData.setResponseBody(Boolean.parseBoolean(getNodeAttributeValue(node1, "responseBody"))); adminData.setController(adminControllerData); } break; } } return adminData; } private static String getNodeAttributeValue(Node node, String attr) { if (node.getAttributes().getNamedItem(attr) != null) { return node.getAttributes().getNamedItem(attr).getNodeValue(); } return null; } private static List<ColumnData> parseColumns(Node node) { List<ColumnData> list = new ArrayList<>(); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node node1 = nodeList.item(i); if (node1.getNodeName().equalsIgnoreCase("column")) { list.add(parseColumn(node1)); } } return list; } private static ColumnData parseColumn(Node node) { ColumnData columnData = new ColumnData(); columnData.setTitle(getNodeAttributeValue(node, "title")); columnData.setProperty(getNodeAttributeValue(node, "property")); String order = getNodeAttributeValue(node, "order"); if (order != null) { columnData.setOrder(Integer.parseInt(order)); } String showType = getNodeAttributeValue(node, "showType"); if (showType != null) { columnData.setShowType(Show.ShowType.valueOf(showType)); } columnData.setImgHeight(Integer.parseInt(getNodeAttributeValue(node, "imgHeight"))); columnData.setImgWidth(Integer.parseInt(getNodeAttributeValue(node, "imgWidth"))); NodeList nodeList = node.getChildNodes(); if (nodeList != null) { for (int i = 0; i < nodeList.getLength(); i++) { FormComponent formComponent = parseFormComponent(nodeList.item(i)); if (formComponent != null) { columnData.setComponent(formComponent); break; } } } return columnData; } private static FormComponent parseFormComponent(Node node) { switch (node.getNodeName()) { case "text": { FormComponentText formComponentText = new FormComponentText(); formComponentText.setDateFormat(getNodeAttributeValue(node, "dateFormat")); formComponentText.setDesc(getNodeAttributeValue(node, "desc")); formComponentText.setInputType(Text.Type.valueOf(getNodeAttributeValue(node, "inputType"))); String maxLength = getNodeAttributeValue(node, "maxLength"); String minlength = getNodeAttributeValue(node, "minlength"); if (maxLength != null) { formComponentText.setMaxLength(Integer.parseInt(maxLength)); } if (minlength != null) { formComponentText.setMinLength(Integer.parseInt(minlength)); } formComponentText.setPlaceHolder(getNodeAttributeValue(node, "placeHolder")); formComponentText.setTextArea(Boolean.parseBoolean(getNodeAttributeValue(node, "isTextArea"))); formComponentText.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable"))); formComponentText.setNotify(getNodeAttributeValue(node, "notify")); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { if (nodeList.item(i).getNodeName().equalsIgnoreCase("verify")) { formComponentText.setVerify(parseVerify(nodeList.item(i))); } } return formComponentText; } case "select": { FormComponentSelect select = new FormComponentSelect(); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { switch (nodeList.item(i).getNodeName()) { case "api": { select.setApi(parseApi(nodeList.item(i))); } break; case "values": { select.setValues(parseValues(nodeList.item(i))); } break; case "verify": { select.setVerify(parseVerify(nodeList.item(i))); } break; } } select.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable"))); select.setNotify(getNodeAttributeValue(node, "notify")); return select; } case "switch": { FormComponentSwitch formComponentSwitch = new FormComponentSwitch(); formComponentSwitch.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable"))); formComponentSwitch.setNotify(getNodeAttributeValue(node, "notify")); return formComponentSwitch; } case "img": { FormComponentImg img = new FormComponentImg(); img.setEditLink(Boolean.parseBoolean(getNodeAttributeValue(node, "editLink"))); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { if (nodeList.item(i).getNodeName().equalsIgnoreCase("api")) { img.setApi(parseApi(nodeList.item(i))); break; } } String height = getNodeAttributeValue(node, "height"); if (height != null) { img.setHeight(Integer.parseInt(height)); } String width = getNodeAttributeValue(node, "width"); if (width != null) { img.setWidth(Integer.parseInt(width)); } img.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable"))); img.setNotify(getNodeAttributeValue(node, "notify")); return img; } case "radioGroup": { FormComponentRadioGroup radioGroup = new FormComponentRadioGroup(); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { if (nodeList.item(i).getNodeName().equalsIgnoreCase("values")) { radioGroup.setValues(parseValues(nodeList.item(i))); break; } } radioGroup.setEnable(Boolean.parseBoolean(getNodeAttributeValue(node, "enable"))); radioGroup.setNotify(getNodeAttributeValue(node, "notify")); return radioGroup; } } return null; } private static VerifyData parseVerify(Node node) { if (node == null) { return null; } VerifyData verifyData = new VerifyData(); verifyData.setType(FormVerifyType.valueOf(getNodeAttributeValue(node, "type"))); verifyData.setExpress(getNodeAttributeValue(node, "express")); verifyData.setNotify(getNodeAttributeValue(node, "notify")); verifyData.setRequire(Boolean.parseBoolean(getNodeAttributeValue(node, "require"))); return verifyData; } private static ApiData parseApi(Node node) { if (node == null) { return null; } ApiData apiData = new ApiData(); apiData.setPath(getNodeAttributeValue(node, "path")); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { if (nodeList.item(i).getNodeName().equalsIgnoreCase("params")) { apiData.setParams(parseValues(nodeList.item(i))); } } return apiData; } private static Map<String, Object> parseValues(Node node) { if (node == null) { return null; } Map<String, Object> values = new HashMap<>(); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { if (nodeList.item(i).getNodeName().equalsIgnoreCase("value")) { values.put(getNodeAttributeValue(nodeList.item(i), "key"), nodeList.item(i).getNodeValue()); } } return values; } public static void main(String[] args) throws Exception { GenertorConfig config = XmlConfigParseUtil.parse(new FileInputStream("D:\\workspace\\server\\utils\\src\\test\\test.xml")); GeneraterManagerV2.getInstance().init("D:\\workspace\\server\\utils\\src\\test\\java", config); GeneraterManagerV2.getInstance().createWholeFunction(); System.out.println(config); } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AddPageData.java
New file @@ -0,0 +1,44 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin; import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData; import java.util.List; /** * @author hxh * @title: ListPageData * @description: 新增页面 * @date 2022/3/28 14:08 */ public class AddPageData { private List<ColumnData> columns; //请求接口 private ApiData api; //文件名称 private String fileName; public List<ColumnData> getColumns() { return columns; } public void setColumns(List<ColumnData> columns) { this.columns = columns; } public ApiData getApi() { return api; } public void setApi(ApiData api) { this.api = api; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminControllerData.java
New file @@ -0,0 +1,59 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin; /** * @author hxh * @title: AdminControllerData * @description: 管理Controller数据 * @date 2022/3/28 14:23 */ public class AdminControllerData { private String pkg; private String name; private String mapping; //是否responseBody private boolean responseBody; //接口是否jsonp private boolean jsonp; public String getPkg() { return pkg; } public void setPkg(String pkg) { this.pkg = pkg; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMapping() { return mapping; } public void setMapping(String mapping) { this.mapping = mapping; } public boolean isResponseBody() { return responseBody; } public void setResponseBody(boolean responseBody) { this.responseBody = responseBody; } public boolean isJsonp() { return jsonp; } public void setJsonp(boolean jsonp) { this.jsonp = jsonp; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminData.java
New file @@ -0,0 +1,28 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin; /** * @author hxh * @title: AdminData * @description: 管理信息 * @date 2022/3/28 14:17 */ public class AdminData { private AdminPageData pages; private AdminControllerData controller; public AdminPageData getPages() { return pages; } public void setPages(AdminPageData pages) { this.pages = pages; } public AdminControllerData getController() { return controller; } public void setController(AdminControllerData controller) { this.controller = controller; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/AdminPageData.java
New file @@ -0,0 +1,57 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin; /** * @author hxh * @title: AdminPageData * @description: TODO * @date 2022/3/28 14:31 */ public class AdminPageData { private ListPageData list; private AddPageData add; private UpdatePageData update; //页面文件目录路径 private String pageDir; //功能名称 private String title; public ListPageData getList() { return list; } public void setList(ListPageData list) { this.list = list; } public AddPageData getAdd() { return add; } public void setAdd(AddPageData add) { this.add = add; } public UpdatePageData getUpdate() { return update; } public void setUpdate(UpdatePageData update) { this.update = update; } public String getPageDir() { return pageDir; } public void setPageDir(String pageDir) { this.pageDir = pageDir; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/ColumnData.java
New file @@ -0,0 +1,86 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin; import org.yeshi.utils.generater.annotation.admin.Show; import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent; /** * @author hxh * @title: ColumnData * @description: 列信息 * @date 2022/3/28 14:05 */ public class ColumnData { //显示标题 private String title; //属性字段 private String property; //排序字段 private Integer order; //显示类型 private Show.ShowType showType; private int imgWidth; private int imgHeight; //编辑控件 private FormComponent component; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } public Integer getOrder() { return order; } public void setOrder(Integer order) { this.order = order; } public FormComponent getComponent() { return component; } public void setComponent(FormComponent component) { this.component = component; } public Show.ShowType getShowType() { return showType; } public void setShowType(Show.ShowType showType) { this.showType = showType; } public int getImgWidth() { return imgWidth; } public void setImgWidth(int imgWidth) { this.imgWidth = imgWidth; } public int getImgHeight() { return imgHeight; } public void setImgHeight(int imgHeight) { this.imgHeight = imgHeight; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/ListPageData.java
New file @@ -0,0 +1,85 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin; import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData; import java.util.List; /** * @author hxh * @title: ListPageData * @description: 列表页面 * @date 2022/3/28 14:08 */ public class ListPageData { private List<ColumnData> columns; private SearchFormData searchForm; //请求接口 private ApiData api; //是否可删除 private boolean delete; //是否可编辑 private boolean edit; //文件名称 private String fileName; //是否可分页 private boolean page; public List<ColumnData> getColumns() { return columns; } public void setColumns(List<ColumnData> columns) { this.columns = columns; } public SearchFormData getSearchForm() { return searchForm; } public void setSearchForm(SearchFormData searchForm) { this.searchForm = searchForm; } public ApiData getApi() { return api; } public void setApi(ApiData api) { this.api = api; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public boolean isDelete() { return delete; } public void setDelete(boolean delete) { this.delete = delete; } public boolean isEdit() { return edit; } public void setEdit(boolean edit) { this.edit = edit; } public boolean isPage() { return page; } public void setPage(boolean page) { this.page = page; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/SearchFormData.java
New file @@ -0,0 +1,43 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin; import java.util.List; /** * @author hxh * @title: SearchFormData * @description: 搜索条件表单 * @date 2022/3/28 14:10 */ public class SearchFormData { //列 private List<ColumnData> columns; //包名 private String pkg; //类名称 private String name; public List<ColumnData> getColumns() { return columns; } public void setColumns(List<ColumnData> columns) { this.columns = columns; } public String getPkg() { return pkg; } public void setPkg(String pkg) { this.pkg = pkg; } public String getName() { return name; } public void setName(String name) { this.name = name; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/UpdatePageData.java
New file @@ -0,0 +1,44 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin; import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData; import java.util.List; /** * @author hxh * @title: ListPageData * @description: 更新页面 * @date 2022/3/28 14:08 */ public class UpdatePageData { private List<ColumnData> columns; //请求接口 private ApiData api; //文件名称 private String fileName; public List<ColumnData> getColumns() { return columns; } public void setColumns(List<ColumnData> columns) { this.columns = columns; } public ApiData getApi() { return api; } public void setApi(ApiData api) { this.api = api; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentImg.java
New file @@ -0,0 +1,52 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin.form; import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData; import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent; /** * @author hxh * @title: FormComponentSelect * @description: 图片控件 * @date 2022/3/28 13:56 */ public class FormComponentImg extends FormComponent { //图片上传链接 private ApiData api; //是否可编辑图片链接 private boolean editLink; private Integer width; private Integer height; public ApiData getApi() { return api; } public void setApi(ApiData api) { this.api = api; } public boolean isEditLink() { return editLink; } public void setEditLink(boolean editLink) { this.editLink = editLink; } public Integer getWidth() { return width; } public void setWidth(Integer width) { this.width = width; } public Integer getHeight() { return height; } public void setHeight(Integer height) { this.height = height; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentRadioGroup.java
New file @@ -0,0 +1,26 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin.form; import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent; import java.util.List; import java.util.Map; /** * @author hxh * @title: FormComponentSelect * @description: 单选控件 * @date 2022/3/28 13:56 */ public class FormComponentRadioGroup extends FormComponent { //内容常量接口 private Map<String, Object> values; public Map<String, Object> getValues() { return values; } public void setValues(Map<String, Object> values) { this.values = values; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentSelect.java
New file @@ -0,0 +1,46 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin.form; import org.yeshi.utils.generater.vo.xmlconfig.base.ApiData; import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent; import org.yeshi.utils.generater.vo.xmlconfig.base.VerifyData; import java.util.List; import java.util.Map; /** * @author hxh * @title: FormComponentSelect * @description: 选择控件 * @date 2022/3/28 13:56 */ public class FormComponentSelect extends FormComponent { //内容常量接口 private Map<String, Object> values; //内容的API接口 private ApiData api; private VerifyData verify; public Map<String, Object> getValues() { return values; } public void setValues(Map<String, Object> values) { this.values = values; } public ApiData getApi() { return api; } public void setApi(ApiData api) { this.api = api; } public VerifyData getVerify() { return verify; } public void setVerify(VerifyData verify) { this.verify = verify; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentSwitch.java
New file @@ -0,0 +1,13 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin.form; import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent; /** * @author hxh * @title: FormComponentSelect * @description: 开关控件 * @date 2022/3/28 13:56 */ public class FormComponentSwitch extends FormComponent { } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/admin/form/FormComponentText.java
New file @@ -0,0 +1,86 @@ package org.yeshi.utils.generater.vo.xmlconfig.admin.form; import org.yeshi.utils.generater.annotation.admin.form.Text; import org.yeshi.utils.generater.vo.xmlconfig.base.FormComponent; import org.yeshi.utils.generater.vo.xmlconfig.base.VerifyData; /** * @author hxh * @title: FormComponentText * @description: 表单组件之文本组件 * @date 2022/3/28 12:13 */ public class FormComponentText extends FormComponent { private String desc; private String dateFormat; private Integer maxLength; private Integer minLength; private Text.Type inputType; private String placeHolder; private boolean isTextArea; private VerifyData verify; public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getDateFormat() { return dateFormat; } public void setDateFormat(String dateFormat) { this.dateFormat = dateFormat; } public Integer getMaxLength() { return maxLength; } public void setMaxLength(Integer maxLength) { this.maxLength = maxLength; } public Integer getMinLength() { return minLength; } public void setMinLength(Integer minLength) { this.minLength = minLength; } public Text.Type getInputType() { return inputType; } public void setInputType(Text.Type inputType) { this.inputType = inputType; } public String getPlaceHolder() { return placeHolder; } public void setPlaceHolder(String placeHolder) { this.placeHolder = placeHolder; } public boolean isTextArea() { return isTextArea; } public void setTextArea(boolean textArea) { isTextArea = textArea; } public VerifyData getVerify() { return verify; } public void setVerify(VerifyData verify) { this.verify = verify; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/ApiData.java
New file @@ -0,0 +1,30 @@ package org.yeshi.utils.generater.vo.xmlconfig.base; import java.util.Map; /** * @author hxh * @title: ApiConfig * @description: 接口数据 * @date 2022/3/28 12:08 */ public class ApiData { private String path; private Map<String, Object> params; public String getPath() { return path; } public void setPath(String path) { this.path = path; } public Map<String, Object> getParams() { return params; } public void setParams(Map<String, Object> params) { this.params = params; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/FormComponent.java
New file @@ -0,0 +1,38 @@ package org.yeshi.utils.generater.vo.xmlconfig.base; /** * @author hxh * @title: EditComponent * @description: 表单组件 * @date 2022/3/28 12:12 */ public class FormComponent { private boolean enable; private String notify; private String desc; public boolean isEnable() { return enable; } public void setEnable(boolean enable) { this.enable = enable; } public String getNotify() { return notify; } public void setNotify(String notify) { this.notify = notify; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/base/VerifyData.java
New file @@ -0,0 +1,52 @@ package org.yeshi.utils.generater.vo.xmlconfig.base; import org.yeshi.utils.generater.entity.admin.FormVerifyType; /** * @author hxh * @title: VerifyConfig * @description: 验证配置 * @date 2022/3/28 13:47 */ public class VerifyData { //验证类型 private FormVerifyType type; //type为regex的表达式 private String express; //是否必须 private boolean require; //提示信息 private String notify; public FormVerifyType getType() { return type; } public void setType(FormVerifyType type) { this.type = type; } public String getExpress() { return express; } public void setExpress(String express) { this.express = express; } public boolean isRequire() { return require; } public void setRequire(boolean require) { this.require = require; } public String getNotify() { return notify; } public void setNotify(String notify) { this.notify = notify; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/dao/DaoData.java
New file @@ -0,0 +1,39 @@ package org.yeshi.utils.generater.vo.xmlconfig.dao; import java.util.List; /** * @author hxh * @title: DaoData * @description: Dao数据 * @date 2022/3/28 14:44 */ public class DaoData { private String pkg; private String mapperDir; private List<DaoQuery> queryList; public String getPkg() { return pkg; } public void setPkg(String pkg) { this.pkg = pkg; } public String getMapperDir() { return mapperDir; } public void setMapperDir(String mapperDir) { this.mapperDir = mapperDir; } public List<DaoQuery> getQueryList() { return queryList; } public void setQueryList(List<DaoQuery> queryList) { this.queryList = queryList; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/dao/DaoQuery.java
New file @@ -0,0 +1,31 @@ package org.yeshi.utils.generater.vo.xmlconfig.dao; import org.yeshi.utils.generater.annotation.admin.DaoQueryCondition; /** * @author hxh * @title: DaoQuery * @description: dao条件查询 * @date 2022/3/28 14:42 */ public class DaoQuery { //字段名称 private String name; private DaoQueryCondition.QueryType queryType; public String getName() { return name; } public void setName(String name) { this.name = name; } public DaoQueryCondition.QueryType getQueryType() { return queryType; } public void setQueryType(DaoQueryCondition.QueryType queryType) { this.queryType = queryType; } } src/main/java/org/yeshi/utils/generater/vo/xmlconfig/service/ExceptionData.java
New file @@ -0,0 +1,29 @@ package org.yeshi.utils.generater.vo.xmlconfig.service; /** * @author hxh * @title: ExceptionData * @description: 异常数据 * @date 2022/3/28 14:39 */ public class ExceptionData { private String pkg; private String name; public String getPkg() { return pkg; } public void setPkg(String pkg) { this.pkg = pkg; } public String getName() { return name; } public void setName(String name) { this.name = name; } } src/main/resources/generater/admin/adminController.template
@@ -18,7 +18,10 @@ import ${entity.clazz}; import ${service.clazz}; import ${query.clazz}; <#if responseBody> <#else> import java.io.PrintWriter; </#if> @Controller @RequestMapping("${mapping}") public class ${controllerName} { @@ -28,18 +31,27 @@ @Resource private ${service.name} ${serviceObjName}; private String loadPrint(String callback, String root){ <#macro print data> <#if responseBody> <#if jsonp> return JsonUtil.loadJSONP(callback,root); return JsonUtil.loadJSONP(callback,${data}); <#else> return root; return ${data}; </#if> } <#else> <#if jsonp> out.print(JsonUtil.loadJSONP(callback,${data})); return; <#else> out.print(${data}); return; </#if> </#if> </#macro> @ResponseBody ${responseBody?string("@ResponseBody","")} @RequestMapping("list") public String list(${query.name} query, int page, int limit, String callback) { public ${responseBody?string("String","void")} list(${query.name} query, int page, int limit${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")} ) { List<${entity.name}> list = ${serviceObjName}.list(query,page,limit); long count = ${serviceObjName}.count(query); JSONObject data = new JSONObject(); @@ -53,58 +65,58 @@ data.put("list", gson.toJson(list)); data.put("count", count); return loadPrint(callback,JsonUtil.loadTrueResult(data)); <@print data="JsonUtil.loadTrueResult(data)" > </@print> } <#if delete> @ResponseBody ${responseBody?string("@ResponseBody","")} @RequestMapping("delete") public String delete(String ids, String callback) { public ${responseBody?string("String","void")} delete(String ids${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")}) { Type type = new TypeToken<List<${identifyIdType}>>(){}.getType(); List<${identifyIdType}> idList=new Gson().fromJson(ids,type); ${serviceObjName}.delete(idList); return loadPrint(callback, JsonUtil.loadTrueResult("")); <@print data="JsonUtil.loadTrueResult(\"\")" > </@print> } </#if> <#if add> @ResponseBody ${responseBody?string("@ResponseBody","")} @RequestMapping("add") public String add(${entity.name} bean, HttpSession session, String callback) { public ${responseBody?string("String","void")} add(${entity.name} bean, HttpSession session${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")}) { try{ ${serviceObjName}.add(bean); return loadPrint(callback, JsonUtil.loadTrueResult("")); <@print data="JsonUtil.loadTrueResult(\"\")" > </@print> }catch(Exception e){ return loadPrint(callback, JsonUtil.loadFalseResult(e.getMessage())); <@print data="JsonUtil.loadFalseResult(e.getMessage())" > </@print> } } </#if> @ResponseBody ${responseBody?string("@ResponseBody","")} @RequestMapping("get") public String get(${identifyIdType} id, HttpSession session, String callback) { public ${responseBody?string("String","void")} get(${identifyIdType} id, HttpSession session${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")}) { ${entity.name} entity = ${serviceObjName}.get(id); if (entity !=null){ return loadPrint(callback,JsonUtil.loadTrueResult(entity)); <@print data="JsonUtil.loadTrueResult(entity)" > </@print> } else { return loadPrint(callback,JsonUtil.loadFalseResult("ID不存在")); <@print data="JsonUtil.loadFalseResult(\"ID不存在\")" > </@print> } } <#if update> @ResponseBody ${responseBody?string("@ResponseBody","")} @RequestMapping("update") public String update(${entity.name} bean, HttpSession session,String callback) { public ${responseBody?string("String","void")} update(${entity.name} bean, HttpSession session${jsonp?string(", String callback","")}${responseBody?string("",",PrintWriter out")}) { if (bean.getId() == null) { return loadPrint(callback, JsonUtil.loadFalseResult("ID不能为空")); <@print data="JsonUtil.loadFalseResult(\"ID不能为空\")" > </@print> } try{ ${serviceObjName}.update(bean); }catch(Exception e){ return loadPrint(callback,JsonUtil.loadFalseResult(e.getMessage())); <@print data="JsonUtil.loadFalseResult(e.getMessage())" > </@print> } return loadPrint(callback,JsonUtil.loadTrueResult("")); <@print data="JsonUtil.loadTrueResult(\"\")" > </@print> } </#if> src/main/resources/schemas/generator.dtd
New file @@ -0,0 +1,110 @@ <!-- 自动化代码生成器,包含自动生成 --> <!ELEMENT generator-config (dao?,service?,admin?)> <!ATTLIST generator-config class CDATA #REQUIRED> <!-- dao配置信息 --> <!ELEMENT dao (queryList?)> <!ATTLIST dao mapperDir CDATA #IMPLIED> <!ATTLIST dao package CDATA #REQUIRED> <!ELEMENT queryList (query+)> <!ELEMENT query EMPTY> <!ATTLIST query name CDATA #REQUIRED> <!ATTLIST query type (start|end|contains|equal|gt|gte|lt|lte) #REQUIRED> <!ELEMENT service (exception?)> <!ATTLIST service interPackage CDATA #REQUIRED> <!ATTLIST service implPackage CDATA #REQUIRED> <!ATTLIST service queryPackage CDATA #REQUIRED> <!ELEMENT exception EMPTY> <!ATTLIST exception package CDATA #REQUIRED> <!ATTLIST exception name CDATA #IMPLIED> <!--表单配置信息 --> <!ELEMENT admin (controller?,pages?)> <!ELEMENT controller EMPTY> <!ATTLIST controller package CDATA #REQUIRED> <!ATTLIST controller name CDATA #IMPLIED> <!ATTLIST controller mapping CDATA #REQUIRED> <!ATTLIST controller responseBody (true|false) "true"> <!ATTLIST controller jsonp (true|false) "true"> <!ELEMENT pages (list?,add?,update?)> <!ATTLIST pages title CDATA #REQUIRED> <!ATTLIST pages pageDir CDATA #REQUIRED> <!ELEMENT list (searchForm?,columns,api?)> <!ATTLIST list fileName CDATA #IMPLIED> <!ATTLIST list delete (true|false) "true"> <!ATTLIST list edit (true|false) "true"> <!ATTLIST list page (true|false) "true"> <!ELEMENT columns (column*)> <!ELEMENT searchForm (columns)> <!ELEMENT column (text?|select?|radioGroup?|switch?|img?)> <!ATTLIST column property CDATA #REQUIRED> <!ATTLIST column title CDATA #REQUIRED> <!ATTLIST column order CDATA "0"> <!ATTLIST column showType (TEXT|IMG|SWITCH) #IMPLIED> <!ATTLIST column imgWidth CDATA "-1"> <!ATTLIST column imgHeight CDATA "-1"> <!ELEMENT add (column+)> <!ATTLIST add fileName CDATA #IMPLIED> <!ELEMENT update (column+)> <!ATTLIST update fileName CDATA #IMPLIED> <!--表单中的text --> <!ELEMENT text (verify*)> <!ATTLIST text maxLength CDATA #IMPLIED> <!ATTLIST text minlength CDATA #IMPLIED> <!ATTLIST text inputType (TEXT|DATE|DATETIME) #REQUIRED> <!ATTLIST text dateFormat CDATA #IMPLIED> <!ATTLIST text placeHolder CDATA ""> <!ATTLIST text desc CDATA #IMPLIED> <!ATTLIST text enable (true|false) "true"> <!ATTLIST text isTextArea (true|false) "false"> <!ELEMENT verify EMPTY> <!ATTLIST verify type (number|phone|email|date|url|identity|regex|none) #REQUIRED> <!ATTLIST verify express CDATA #IMPLIED> <!ATTLIST verify notify CDATA #IMPLIED> <!ATTLIST verify require (true|false) #IMPLIED> <!--表单中的select --> <!ELEMENT select ((values|api),verify?)> <!ATTLIST select notify CDATA #IMPLIED> <!ATTLIST select enable (true|false) "true"> <!ELEMENT values (value*)> <!ELEMENT value (#PCDATA)> <!ATTLIST value key CDATA #REQUIRED> <!ELEMENT api (params?)> <!ATTLIST api path CDATA #REQUIRED> <!ELEMENT params (value+)> <!--表单中的radioGroup --> <!ELEMENT radioGroup (values)> <!ATTLIST radioGroup enable (true|false) "true"> <!--表单中的switch --> <!ELEMENT switch EMPTY> <!ATTLIST switch enable (true|false) "true"> <!--表单中的img --> <!ELEMENT img (api?)> <!ATTLIST img enable (true|false) "true"> <!ATTLIST img editLink (true|false) "false"> <!ATTLIST img width CDATA #IMPLIED> <!ATTLIST img height CDATA #IMPLIED> src/test/java/com/generater/GeneratorTest.java
@@ -3,16 +3,14 @@ import org.springframework.data.annotation.Id; import org.yeshi.utils.FileUtil; import org.yeshi.utils.FreemarkerUtils; import org.yeshi.utils.generater.GeneraterManager; import org.yeshi.utils.generater.GeneraterUtil; import org.yeshi.utils.generater.entity.ClassInfo; import org.yeshi.utils.generater.entity.admin.AdminGeneraterInfo; import org.yeshi.utils.generater.mybatis.Column; 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.xmlconfig.base.FormComponent; import org.yeshi.utils.generater.vo.xmlconfig.admin.form.FormComponentText; import org.yeshi.utils.generater.vo.dao.MongoDBDaoVO; import org.yeshi.utils.generater.vo.dao.MyBatisDBDaoVO; import org.yeshi.utils.generater.vo.service.ServiceImplInfoVO; @@ -153,6 +151,14 @@ // AdminGeneraterParams adminGeneraterParams=new AdminGeneraterParams("com.generater.temp.controller","D:\\workspace\\server\\utils\\src\\test"); // // GeneraterManager.getInstance().createWholeFunction(new DaoGeneraterParams("com.generater.temp.dao", "D:\\workspace\\server\\utils\\src\\test"), new ServiceGeneraterParams("com.generater.temp.query","com.generater.temp.service","com.generater.temp.service.impl"), adminGeneraterParams); FormComponent fc=new FormComponentText(); System.out.println(fc instanceof FormComponentText); FormComponentText text=(FormComponentText) fc; System.out.println(text); } src/test/test.xml
New file @@ -0,0 +1,88 @@ <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE generator-config PUBLIC "-//yeshitv.com//DTD generator_code 1.0//EN" "http://192.168.3.122:8848/buwan-web/dtd/generator.dtd"> <generator-config class="org.yeshi.utils.generater.TestEntity3"> <dao package="com.generater.test.mapper" mapperDir="D:/workspace/server/utils/src/test/java/mapper"> <queryList> <query name="nickName" type="contains"></query> </queryList> </dao> <service interPackage="com.generater.test.service.inter" implPackage="com.generater.test.service.impl" queryPackage="com.generater.test.query"> <exception package="com.generater.test.exception"></exception> </service> <admin> <controller package="com.generater.test.controller.admin" mapping="/test" /> <pages title="测试" pageDir="D:/workspace/server/utils/src/test/java/html"> <list fileName="list.html"> <searchForm> <columns> <column property="nickName" title="昵称"> <text inputType="TEXT" maxLength="100"></text> </column> </columns> </searchForm> <columns> <column property="id" title="ID" showType="TEXT"></column> <column property="nickName" title="昵称" showType="TEXT"></column> <column property="sex" title="性别" showType="TEXT"></column> <column property="portrait" title="头像" showType="IMG"></column> </columns> </list> <add fileName="add.html"> <column property="nickName" title="昵称"> <text inputType="TEXT" dateFormat="" placeHolder=""> <verify type="regex" express="*" require="true" notify=""></verify> </text> </column> <column property="sex" title="性别"> <select> <values> <value key="0">未知</value> <value key="1">男</value> <value key="2">女</value> </values> </select> </column> <column property="province" title="省份"> <select> <api path="api/getCountrys"> <params> <value key="cq">重庆</value> <value key="sc">四川</value> </params> </api> <verify type="none" require="true"></verify> </select> </column> <column property="show" title="是否显示"> <switch></switch> </column> <column property="portrait" title="头像"> <img enable="false" editLink="true"> <api path="/api/uploadImg"> <params> <value key="type">portrait</value> </params> </api> </img> </column> </add> <update fileName="update.html"> <column property="nickName" title="昵称"> <text inputType="TEXT"> <verify type="regex" express="*" require="true" notify=""></verify> </text> </column> </update> </pages> </admin> </generator-config>