From cb5c857001f77027e2a2f774115591c662c020b9 Mon Sep 17 00:00:00 2001 From: vsxingchen <37962879@qq.com> Date: Tue, 9 Jan 2024 17:50:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- food-pdm-tools/pom.xml | 33 +++ .../java/com/jwsaas/powerdesign/Generate.java | 201 ++++++++++++++++ .../powerdesign/parse/CamelCaseUtils.java | 86 +++++++ .../jwsaas/powerdesign/parse/PDMParser.java | 159 ++++++++++++ .../powerdesign/parse/bean/Category.java | 75 ++++++ .../jwsaas/powerdesign/parse/bean/Column.java | 227 ++++++++++++++++++ .../jwsaas/powerdesign/parse/bean/Domain.java | 70 ++++++ .../powerdesign/parse/bean/Messages.java | 51 ++++ .../powerdesign/parse/bean/Project.java | 164 +++++++++++++ .../jwsaas/powerdesign/parse/bean/Table.java | 151 ++++++++++++ .../powerdesign/parse/bean/TableSchema.java | 49 ++++ .../DataSourceDescriptorException.java | 22 ++ .../parse/exceptions/ErrorContext.java | 60 +++++ .../parse/exceptions/ExceptionFactory.java | 60 +++++ .../parse/exceptions/ForeignKeyException.java | 22 ++ .../parse/exceptions/ServiceException.java | 23 ++ .../parse/exceptions/ValidationException.java | 23 ++ .../main/resources/template/dao.impl.java.ftl | 14 ++ .../src/main/resources/template/dao.java.ftl | 8 + .../main/resources/template/entity.java.ftl | 51 ++++ .../main/resources/template/mapper.xml.ftl | 118 +++++++++ .../resources/template/service.impl.java.ftl | 26 ++ .../main/resources/template/service.java.ftl | 11 + .../template/spring.reference.xml.ftl | 13 + .../resources/template/spring.service.xml.ftl | 13 + .../resources/template/spring.test.xml.ftl | 13 + 26 files changed, 1743 insertions(+) create mode 100644 food-pdm-tools/pom.xml create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/Generate.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/CamelCaseUtils.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/PDMParser.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Category.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Column.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Domain.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Messages.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Project.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Table.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/TableSchema.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/DataSourceDescriptorException.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ErrorContext.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ExceptionFactory.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ForeignKeyException.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ServiceException.java create mode 100644 food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ValidationException.java create mode 100644 food-pdm-tools/src/main/resources/template/dao.impl.java.ftl create mode 100644 food-pdm-tools/src/main/resources/template/dao.java.ftl create mode 100644 food-pdm-tools/src/main/resources/template/entity.java.ftl create mode 100644 food-pdm-tools/src/main/resources/template/mapper.xml.ftl create mode 100644 food-pdm-tools/src/main/resources/template/service.impl.java.ftl create mode 100644 food-pdm-tools/src/main/resources/template/service.java.ftl create mode 100644 food-pdm-tools/src/main/resources/template/spring.reference.xml.ftl create mode 100644 food-pdm-tools/src/main/resources/template/spring.service.xml.ftl create mode 100644 food-pdm-tools/src/main/resources/template/spring.test.xml.ftl diff --git a/food-pdm-tools/pom.xml b/food-pdm-tools/pom.xml new file mode 100644 index 0000000..d702df5 --- /dev/null +++ b/food-pdm-tools/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + com.jwsaas + food-parent + 2.0.0 + + food-pdm-tools + food-pdm-tools + http://maven.apache.org + + + UTF-8 + 2.3.23 + + + + + org.apache.commons + commons-lang3 + + + + org.freemarker + freemarker + ${freemarker.version} + + + + diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/Generate.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/Generate.java new file mode 100644 index 0000000..fca1cf1 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/Generate.java @@ -0,0 +1,201 @@ +package com.jwsaas.powerdesign; + +import java.io.File; +import java.io.FileWriter; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + +import com.jwsaas.powerdesign.parse.PDMParser; +import com.jwsaas.powerdesign.parse.bean.Category; +import com.jwsaas.powerdesign.parse.bean.Project; +import com.jwsaas.powerdesign.parse.bean.Table; + +import freemarker.template.Configuration; +import freemarker.template.DefaultObjectWrapper; +import freemarker.template.Template; + +public class Generate { + + public static void main(String[] args) throws Exception { + + String currentPath = PDMParser.class.getResource("/").getPath(); + File file = new File(currentPath); + + String pdmFile = file.getParentFile().getParentFile().getParentFile() + File.separator + "food-document" + File.separator + "db" + File.separator + "food_v2.0.pdm"; + + Project project = PDMParser.parse(new File(pdmFile)); + + for (Category category : project.getCategoryList()) { + List tables = category.getTableList(); + for (Table table : tables) { + String comment = category.getComment(); + + if (StringUtils.isNotEmpty(comment) && comment.indexOf("#") > 0 && comment.split("#").length == 3) { + String[] str = comment.split("#"); + table.setSign(str[0]); + table.setBasePackage(str[1]); + table.setSignPackage(str[2]); + } else { + // System.out.println(category.getName() + + // "-->Comment没有定义或者格式错误"); + } + } + + } + + // 生成Entity、Dao、Service + generate(project.getTableList()); + + generateSpring(project); + + } + + protected static void generate(List
tables) { + Configuration cfg = new Configuration(Configuration.VERSION_2_3_23); + try { + String currentPath = PDMParser.class.getResource("/").getPath(); + File file = new File(currentPath + File.separator + "template"); + + cfg.setDirectoryForTemplateLoading(file); + cfg.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_21)); + cfg.setOutputEncoding("utf-8"); + // TODO 如何做国际化。 + cfg.setDefaultEncoding("utf-8"); + cfg.setNumberFormat("#"); + + cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250)); + + for (Table table : tables) { + + File out = new File(currentPath).getParentFile().getParentFile(); + + String filePath = out.getPath() + File.separator + "src" + File.separator + "generate" + File.separator + (StringUtils.isNotEmpty(table.getSign()) ? (table.getSign() + File.separator) : ""); + + System.out.println(table.getName() + "," + table.getBasePackage()); + + // 判断entity包名是否存在,不存在新建 + String packageName = table.getBasePackage() + ".entity" + ((StringUtils.isNotEmpty(table.getSign()) && !"shared".equals(table.getSign())) ? ("." + table.getSign()) : ""); + File dir = new File(filePath + packageName); + if (!dir.exists()) { + dir.mkdirs(); + } + + // 生成Entity的类 + Template template = cfg.getTemplate("entity.java.ftl"); + FileWriter writer = new FileWriter(filePath + packageName + File.separator + table.getScode() + ".java"); + template.process(table, writer); + + // 生成Dao的接口 + template = cfg.getTemplate("dao.java.ftl"); + packageName = table.getBasePackage() + ".dao" + ((StringUtils.isNotEmpty(table.getSign()) && !"shared".equals(table.getSign())) ? ("." + table.getSign()) : ""); + dir = new File(filePath + packageName); + if (!dir.exists()) { + dir.mkdirs(); + } + writer = new FileWriter(filePath + packageName + File.separator + table.getScode() + "Dao.java"); + template.process(table, writer); + + // 生成Dao的实现 + template = cfg.getTemplate("dao.impl.java.ftl"); + packageName = table.getBasePackage() + ".dao" + ((StringUtils.isNotEmpty(table.getSign()) && !"shared".equals(table.getSign())) ? ("." + table.getSign()) : "") + ".impl"; + dir = new File(filePath + packageName); + if (!dir.exists()) { + dir.mkdirs(); + } + writer = new FileWriter(filePath + packageName + File.separator + table.getScode() + "DaoImpl.java"); + template.process(table, writer); + + // 生成Service的接口 + template = cfg.getTemplate("service.java.ftl"); + packageName = table.getBasePackage() + ".service" + ((StringUtils.isNotEmpty(table.getSign()) && !"shared".equals(table.getSign())) ? ("." + table.getSign()) : ""); + ; + dir = new File(filePath + packageName); + if (!dir.exists()) { + dir.mkdirs(); + } + writer = new FileWriter(filePath + packageName + File.separator + table.getScode() + "Service.java"); + template.process(table, writer); + + // 生成Service的实现 + template = cfg.getTemplate("service.impl.java.ftl"); + packageName = table.getBasePackage() + ".service" + ((StringUtils.isNotEmpty(table.getSign()) && !"shared".equals(table.getSign())) ? ("." + table.getSign()) : "") + ".impl"; + dir = new File(filePath + packageName); + if (!dir.exists()) { + dir.mkdirs(); + } + writer = new FileWriter(filePath + packageName + File.separator + table.getScode() + "ServiceImpl.java"); + template.process(table, writer); + + // 生成MyBatis的Mapper文件 + template = cfg.getTemplate("mapper.xml.ftl"); + + dir = new File(filePath + "mybatis"); + if (!dir.exists()) { + dir.mkdirs(); + } + writer = new FileWriter(filePath + "mybatis" + File.separator + table.getScode() + "Mapper.xml"); + template.process(table, writer); + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + protected static void generateSpring(Project project) { + + Configuration cfg = new Configuration(Configuration.VERSION_2_3_21); + try { + + String currentPath = PDMParser.class.getResource("/").getPath(); + File file = new File(currentPath + File.separator + "template"); + + cfg.setDirectoryForTemplateLoading(file); + cfg.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_21)); + cfg.setOutputEncoding("utf-8"); + // TODO 如何做国际化。 + cfg.setDefaultEncoding("utf-8"); + cfg.setNumberFormat("#"); + + cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250)); + + File out = new File(currentPath).getParentFile().getParentFile(); + + String filePath = out.getPath() + File.separator + "src" + File.separator + "generate" + File.separator; + + // 生成Spring的服务暴露配置文件 + Template template = cfg.getTemplate("spring.service.xml.ftl"); + + File dir = new File(filePath + "spring"); + if (!dir.exists()) { + dir.mkdirs(); + } + FileWriter writer = new FileWriter(filePath + "spring" + File.separator + "spring-service.xml"); + template.process(project, writer); + + // 生成Spring的服务引用配置文件 + template = cfg.getTemplate("spring.reference.xml.ftl"); + + dir = new File(filePath + "spring"); + if (!dir.exists()) { + dir.mkdirs(); + } + writer = new FileWriter(filePath + "spring" + File.separator + "spring-reference.xml"); + template.process(project, writer); + + // 生成Spring的单元测试直连配置文件 + template = cfg.getTemplate("spring.test.xml.ftl"); + + dir = new File(filePath + "spring"); + if (!dir.exists()) { + dir.mkdirs(); + } + writer = new FileWriter(filePath + "spring" + File.separator + "spring-test.xml"); + template.process(project, writer); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/CamelCaseUtils.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/CamelCaseUtils.java new file mode 100644 index 0000000..0686ab8 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/CamelCaseUtils.java @@ -0,0 +1,86 @@ +package com.jwsaas.powerdesign.parse; + +public class CamelCaseUtils { + + private static final char SEPARATOR = '_'; + + public static String toUnderlineName(String s) { + if (s == null) { + return null; + } + + StringBuilder sb = new StringBuilder(); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + boolean nextUpperCase = true; + + if (i < (s.length() - 1)) { + nextUpperCase = Character.isUpperCase(s.charAt(i + 1)); + } + + if ((i >= 0) && Character.isUpperCase(c)) { + if (!upperCase || !nextUpperCase) { + if (i > 0) + sb.append(SEPARATOR); + } + upperCase = true; + } else { + upperCase = false; + } + + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + public static String toCamelCase(String s) { + if (s == null) { + return null; + } + + s = s.toLowerCase(); + + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + if (c == SEPARATOR) { + upperCase = true; + } else if (upperCase) { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } else { + sb.append(c); + } + } + + return sb.toString(); + } + + /** + * 首字母小写 + * + * @param s + * @return + */ + public static String toCapitalizeCamelCase(String s) { + if (s == null) { + return null; + } + s = toCamelCase(s); + return s.substring(0, 1).toUpperCase() + s.substring(1); + } + + public static void main(String[] args) { + System.out.println(CamelCaseUtils.toUnderlineName("ISOCertifiedStaff")); + System.out.println(CamelCaseUtils.toUnderlineName("CertifiedStaff")); + System.out.println(CamelCaseUtils.toUnderlineName("UserID")); + System.out.println(CamelCaseUtils.toCamelCase("iso_certified_staff")); + System.out.println(CamelCaseUtils.toCamelCase("certified_staff")); + System.out.println(CamelCaseUtils.toCamelCase("user_id")); + } +} \ No newline at end of file diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/PDMParser.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/PDMParser.java new file mode 100644 index 0000000..053560a --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/PDMParser.java @@ -0,0 +1,159 @@ +package com.jwsaas.powerdesign.parse; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.jwsaas.powerdesign.parse.bean.Category; +import com.jwsaas.powerdesign.parse.bean.Column; +import com.jwsaas.powerdesign.parse.bean.Domain; +import com.jwsaas.powerdesign.parse.bean.Project; +import com.jwsaas.powerdesign.parse.bean.Table; + +/** + * PDM文件解析 + */ +public class PDMParser { + private PDMParser() { + } + + /** + * 解析指定的pdm文件 + * + * @param pdmFile + * @return + * @throws IOException + */ + public static Project parse(File pdmFile) throws IOException { + return parse(new FileInputStream(pdmFile)); + } + + public static Project parse(InputStream is) throws IOException { + String pdmContent = readFile(is, "UTF-8"); + return parse(pdmContent); + } + + public static Project parse(String pdmContent) { + Project ret = new Project(); + + ret.setAuthor(getString(pdmContent, "(.*?)", 1, null)); + ret.setVersion(getString(pdmContent, "(.*?)", 1, null)); + ret.setName(getString(pdmContent, "(.*?)", 1, null)); + ret.setCode(getString(pdmContent, "(.*?)", 1, null)); + + Pattern lPattern = Pattern.compile("\\s+(.*?)\\s+(.*?)\\s+([a-zA-Z0-9_]+)(?s)(.*?)", Pattern.CASE_INSENSITIVE); + Matcher lMatcher = lPattern.matcher(pdmContent); + while (lMatcher.find()) { + Domain domain = new Domain(lMatcher.group(1), lMatcher.group(3), lMatcher.group(4)); + domain.setType(getString(lMatcher.group(5), "(.*?)", 1, null)); + domain.setComment(getString(lMatcher.group(5), "(?s)(.*?)", 1, null)); + ret.getDomains().put(domain.getId(), domain); + } + + lPattern = Pattern.compile("<(o:Table) Id=\"(.*?)\">(?s)(.*?)<(a:Name)>(.*?)(?s)(.*?)<(a:Code)>(.*?)(?s)(.*?)<(c:Columns)>(?s)(.*?)(?s)(.*?)", Pattern.CASE_INSENSITIVE); + lMatcher.reset(); + lMatcher = lPattern.matcher(getString(pdmContent, "<(c:Tables)>(?s)(.*?)", 2, "")); + while (lMatcher.find()) { + + Table table = new Table(ret.getCode(), lMatcher.group(2), lMatcher.group(9), lMatcher.group(5)); + Pattern pattern = Pattern.compile("<(o:Column) Id=\"(.*?)\">(?s)(.*?)<(a:Name)>(.*?)(?s)(.*?)<(a:Code)>(.*?)(?s)(.*?)<(a:DataType)>(.*?)(?s)(.*?)", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(lMatcher.group(13)); + while (matcher.find()) { + int length = Integer.valueOf(getString(matcher.group(15), "([\\d]+)", 1, "0")); + int precision = Integer.valueOf(getString(matcher.group(15), "([\\d]+)", 1, "0")); + Column column = new Column(matcher.group(2), matcher.group(9), matcher.group(5), matcher.group(13), length, precision); + String nul = getString(matcher.group(15), "<(a:Mandatory)>(.*?)(.*?)", 2, "0"); + if (nul != null && (nul.equalsIgnoreCase("1") || nul.trim().equalsIgnoreCase("yes"))) + column.setNullFlag(true); + column.setDomainId(getString(matcher.group(15), "<(c:Domain)>\\s*\\s*", 2, null)); + column.setComment(getString(matcher.group(11), "(?s)(.*?)", 1, null)); + if (column.getDomainId() != null) + column.setDomain(ret.getDomains().get(column.getDomainId())); + + table.getColumns().add(column); + } + + // FIXME 这里实际上是有问题的,应该先查c:PrimaryKey的值,然后再向上找才准确。 + pattern = Pattern.compile("<(c:Keys)>(?s)(.*?)(?s)(.*?)(.*?)(?s)(.*?)(?s)(.*?)(?s)(.*?)", Pattern.CASE_INSENSITIVE); + matcher = pattern.matcher(lMatcher.group(15)); + if (matcher.find()) + table.setPK(matcher.group(5)); + ret.getTableList().add(table); + } + lPattern = Pattern.compile("<(o:Reference)(.*?)>(?s)(.*?)[0,1]\\.\\.\\*(?s)(.*?)(?s)(.*?)(?s)(.*?)(?s)(.*?)(?s)(.*?)(\\1)", Pattern.CASE_INSENSITIVE); + lMatcher.reset(); + lMatcher = lPattern.matcher(pdmContent); + while (lMatcher.find()) + ret.setFK(lMatcher.group(7), lMatcher.group(5), lMatcher.group(11), lMatcher.group(9)); + + lPattern = Pattern.compile("(?s)(.*?)", Pattern.CASE_INSENSITIVE); + lMatcher.reset(); + lMatcher = lPattern.matcher(pdmContent); + while (lMatcher.find()) { + String name = getString(lMatcher.group(2), "(.*?)", 1, null); + String code = getString(lMatcher.group(2), "(.*?)", 1, null); + String author = getString(lMatcher.group(2), "(.*?)", 1, null); + String comment = getString(lMatcher.group(2), "(.*?)", 1, null); + + Category category = new Category(name, code, author, comment); + category.setId(lMatcher.group(1)); + + Pattern p1 = Pattern.compile("", Pattern.CASE_INSENSITIVE); + Matcher m1 = p1.matcher(lMatcher.group(2)); + while (m1.find()) { + category.getTableList().add(ret.getTable(m1.group(1))); + } + ret.getCategoryList().add(category); + } + scode(ret); + return ret; + } + + private static void scode(Project proj) { + for (Category cate : proj.getCategoryList()) { + for (Table table : cate.getTableList()) { + String prefix = (table.getCode().indexOf('_') > 0 ? table.getCode().substring(0, table.getCode().indexOf('_')) : table.getCode()); + + if (table.getCode().startsWith(prefix)) { + table.setScode(CamelCaseUtils.toCapitalizeCamelCase(table.getCode().substring(prefix.length() + 1))); + } else { + table.setScode(CamelCaseUtils.toCapitalizeCamelCase(table.getCode())); + } + for (Column col : table.getColumns()) { + if (col.getCode().indexOf('_') > 0) { + col.setScode(CamelCaseUtils.toCamelCase(col.getCode())); + } else { + col.setScode(col.getCode()); + } + } + } + } + } + + private static String getString(String str, String reg, int group, String def) { + Pattern p = Pattern.compile(reg, Pattern.CASE_INSENSITIVE); + Matcher m = p.matcher(str); + if (m.find() && m.groupCount() >= group) + return m.group(group); + return def; + } + + private static String readFile(InputStream fis, String charset) throws IOException { + StringBuffer ret = new StringBuffer(); + BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(fis, charset)); + char[] buf = new char[512]; + int size = bufferedreader.read(buf); + while (size != -1) { + ret.append(buf, 0, size); + size = bufferedreader.read(buf); + } + bufferedreader.close(); + return ret.toString(); + } + +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Category.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Category.java new file mode 100644 index 0000000..c7e086e --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Category.java @@ -0,0 +1,75 @@ +package com.jwsaas.powerdesign.parse.bean; + +import java.util.ArrayList; +import java.util.List; + +/** + * 表分类信息 + * + * @author 张莹 + */ +public class Category { + private String id; + private String name; // PDM名称 + private String code; // PDM代码 + private String author; // 作者 + private String comment; // 注释 + + private List
tableList = new ArrayList
(); + + public Category(String name, String code, String author, String comment) { + super(); + this.name = name; + this.code = code; + this.author = author; + this.comment = comment; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public List
getTableList() { + return tableList; + } + + public void setTableList(List
tableList) { + this.tableList = tableList; + } +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Column.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Column.java new file mode 100644 index 0000000..73bfd62 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Column.java @@ -0,0 +1,227 @@ +package com.jwsaas.powerdesign.parse.bean; + +/** + * 表字段信息 + * + * @author 张莹 + */ +public class Column { + private String id; + private String code; // 字段代码 + private String scode; // 简化后的表代码, 主要是去调前缀,比如BASE_USER-->USER + private String name; // 字段含义 + private String type; // 原始类型及长度 + private int length; + private int precision; + private String domainId; // 定义的数据域ID + private boolean pkFlag; // 是否为主键 + private boolean nullFlag; // 是否可以为空 + private boolean uniqueFlag; // 是否唯一 + private Table ref;// 关联表 + private String refId; // 关联表字段ID + private String comment; // 注释 + + private Domain domain; + + private static final String[] STRING = { "varchar", "text", "tinytext", "longtext", "bigint" }; + private static final String[] DATE = { "date", "datetime", "time", "timestamp" }; + private static final String[] INT = { "int" }; + private static final String[] LONG = { "decimal" }; + private static final String[] DOUBLE = { "decimal" }; + + public Column() { + } + + public Column(String id, String code, String name, String type, int length, int precision) { + this.id = id; + this.code = code; + this.name = name; + this.type = type; + this.length = length; + this.precision = precision; + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer().append(id); + sb.append("\t").append(name).append("(").append(code).append("--").append(scode).append(")"); + sb.append("\t").append(type); + if (nullFlag) + sb.append("\tNot Null"); + if (pkFlag) + sb.append("\tPrimary Key"); + if (uniqueFlag) + sb.append("\tUnique"); + if (ref != null) { + sb.append("\t-->").append(ref.getId()).append("(").append(ref.getCode()).append(").").append(refId).append("(").append(ref.getColumnInfo(refId).getCode()).append(")"); + } + if (domain != null) + sb.append("\tdomainId:").append(domainId); + if (comment != null) + sb.append("\t//").append(comment); + return sb.append("\r\n").toString(); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDomainId() { + return domainId; + } + + public void setDomainId(String domainId) { + this.domainId = domainId; + } + + public boolean isPkFlag() { + return pkFlag; + } + + public void setPkFlag(boolean pkFlag) { + this.pkFlag = pkFlag; + } + + public boolean isNullFlag() { + return nullFlag; + } + + public void setNullFlag(boolean nullFlag) { + this.nullFlag = nullFlag; + } + + public boolean isUniqueFlag() { + return uniqueFlag; + } + + public void setUniqueFlag(boolean uniqueFlag) { + this.uniqueFlag = uniqueFlag; + } + + public String getRefId() { + return refId; + } + + public void setRefId(String refId) { + this.refId = refId; + } + + public Table getRef() { + return ref; + } + + public void setRef(Table ref) { + this.ref = ref; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public Domain getDomain() { + return domain; + } + + public void setDomain(Domain domain) { + this.domain = domain; + } + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } + + public int getPrecision() { + return precision; + } + + public void setPrecision(int precision) { + this.precision = precision; + } + + public String getScode() { + return scode; + } + + public void setScode(String scode) { + this.scode = scode; + } + + public String getJavaType() { + + String dataType = this.type; + int pos = this.type.indexOf("("); + if (pos != -1) { + dataType = this.type.substring(0, pos); + } + + if ("char".equalsIgnoreCase(dataType) && length == 1) + return "Boolean"; + for (String type : STRING) { + if (type.equalsIgnoreCase(dataType)) + return "String"; + } + for (String type : DATE) { + if (type.equalsIgnoreCase(dataType)) + return "Date"; + } + + for (String type : INT) { + if (type.equalsIgnoreCase(dataType)) + return "Integer"; + } + for (String type : LONG) { + if (type.equalsIgnoreCase(dataType)) { + if (precision != 0) { + return "Double"; + } else + return "Long"; + } + + } + + for (String type : DOUBLE) { + dataType = dataType.toLowerCase(); + if (dataType.startsWith(type)) { + return "Double"; + } + } + System.out.println("未知的数据类型:" + dataType); + return "Serializable"; + } +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Domain.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Domain.java new file mode 100644 index 0000000..1551528 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Domain.java @@ -0,0 +1,70 @@ +package com.jwsaas.powerdesign.parse.bean; + +/** + * 数据类型域类 + * + * @author 张莹 + */ +public class Domain { + private String id; + private String name; // 名称 + private String code; // 代码 + private String type; // 数据类型 + private String comment; // 注释 + + public Domain(String id, String name, String code) { + this.id = id; + this.name = name; + this.code = code; + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer().append(id); + sb.append("\t").append(name).append("(").append(code).append(")"); + sb.append("\t").append(type); + if (comment != null) + sb.append("\t//").append(comment); + return sb.append("\r\n").toString(); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } +} \ No newline at end of file diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Messages.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Messages.java new file mode 100644 index 0000000..17d7f9c --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Messages.java @@ -0,0 +1,51 @@ +package com.jwsaas.powerdesign.parse.bean; + +import java.text.MessageFormat; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class Messages { + private static final String BUNDLE_NAME = "com.baoyuan.bean.messages"; //$NON-NLS-1$ + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle + .getBundle(BUNDLE_NAME); + + private Messages() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } + + public static String getString(String key, String parm1) { + try { + return MessageFormat.format(RESOURCE_BUNDLE.getString(key), + new Object[] { parm1 }); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } + + public static String getString(String key, String parm1, String parm2) { + try { + return MessageFormat.format(RESOURCE_BUNDLE.getString(key), + new Object[] { parm1, parm2 }); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } + + public static String getString(String key, String parm1, String parm2, + String parm3) { + try { + return MessageFormat.format(RESOURCE_BUNDLE.getString(key), + new Object[] { parm1, parm2, parm3 }); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Project.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Project.java new file mode 100644 index 0000000..91de098 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Project.java @@ -0,0 +1,164 @@ +package com.jwsaas.powerdesign.parse.bean; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +/** + * PDM项目信息 + */ +public class Project { + private String code; // 项目代码 + private String name; // 项目名称 + private String author; // 作者 + private String version; // 版本 + private Date cdate; // 创建日期 + + private Map domains = new HashMap(); + private List categoryList = new ArrayList(); + private List
tableList = new ArrayList
(); // 表列表 + + /** + * 获取指定ID的表定义信息 + * + * @param oid + * @return + */ + public Table getTable(String oid) { + for (int i = 0; i < tableList.size(); i++) + if (((Table) tableList.get(i)).getId().equals(oid)) + return ((Table) tableList.get(i)); + return null; + } + + /** + * 设置表关联 + * + * @param soid + * @param toid + * @param sfoid + * @param tfoid + */ + public void setFK(String soid, String toid, String sfoid, String tfoid) { + Table t1 = getTable(soid); + Table t2 = getTable(toid); + if (t1 == null || t2 == null) + return; + + Column col1 = t1.getColumnInfo(sfoid); + Column col2 = t2.getColumnInfo(tfoid); + if (col1 == null || col2 == null) + return; + + col1.setRef(t2); + col1.setRefId(tfoid); + } + + /** + * 获取指定的PDM分类 + * + * @param cateId + * @return + */ + public Category getCategory(String cateId) { + for (Category cate : categoryList) { + if (cateId.equals(cate.getId())) + return cate; + } + return null; + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer().append(name); + sb.append("(").append(code).append(")\tAuthor:").append(author); + sb.append(" Version:").append(version); + sb.append(" Create time:").append(cdate); + sb.append(" ").append(domains.size()).append(" domains"); + sb.append(" ").append(categoryList.size()).append(" pdms"); + sb.append(" ").append(tableList.size()).append(" tables"); + sb.append("\r\n"); + + if (domains.size() > 0) { + sb.append("Domain List:\r\n"); + for (Entry entry : domains.entrySet()) { + sb.append("\t").append(entry.getValue()); + } + } + + if (tableList.size() > 0) { + sb.append("Table List:\r\n"); + for (Table table : tableList) { + sb.append("\t").append(table); + } + } + return sb.append("\r\n").toString(); + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Date getCdate() { + return cdate; + } + + public void setCdate(Date cdate) { + this.cdate = cdate; + } + + public List getCategoryList() { + return categoryList; + } + + public void setCategoryList(List categoryList) { + this.categoryList = categoryList; + } + + public List
getTableList() { + return tableList; + } + + public void setTableList(List
tableList) { + this.tableList = tableList; + } + + public Map getDomains() { + return domains; + } + + public void setDomains(Map domains) { + this.domains = domains; + } +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Table.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Table.java new file mode 100644 index 0000000..ef3fd46 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/Table.java @@ -0,0 +1,151 @@ +package com.jwsaas.powerdesign.parse.bean; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.RandomStringUtils; + +/** + * 表信息 + * + * @author 张莹 + */ +public class Table { + private String id; + private String prjId; // 项目ID + private String code; // 表代码 + private String name; // 表含义 + private String scode; // 简化后的表代码, 主要是去调前缀,比如BASE_USER-->USER + + private String basePackage;// 包名 + private String sign;// 项目标识,影响包的命名规范(dao层规范:basePackage.sign.dao.impl,service层:basePackage.sign.service.impl) + private String signPackage;// 区别服务标识,类似Shared.SIGN + + private List columns = new ArrayList(); // 列信息 + + public Table() { + } + + public Table(String prjId, String id, String code, String name) { + this.prjId = prjId; + this.id = id; + this.code = code; + this.name = name; + } + + /** + * 取得指定id的字段信息 + * + * @param oid + * @return + */ + public Column getColumnInfo(String oid) { + Column col = null; + for (int i = 0; i < columns.size(); i++) { + col = (Column) columns.get(i); + if (col.getId().equalsIgnoreCase(oid)) + break; + } + return col; + } + + /** + * 设置主键 + * + * @param oid + */ + public void setPK(String oid) { + Column col = getColumnInfo(oid); + if (col != null) + col.setPkFlag(true); + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer().append(id); + sb.append("\t").append(name).append("(").append(code).append("--").append(scode).append(")\r\n"); + + if (columns.size() > 0) { + for (Column column : columns) { + sb.append("\t\t").append(column); + } + } + return sb.append("\r\n").toString(); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPrjId() { + return prjId; + } + + public void setPrjId(String prjId) { + this.prjId = prjId; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getColumns() { + return columns; + } + + public void setColumns(List columns) { + this.columns = columns; + } + + public String getScode() { + return scode; + } + + public void setScode(String scode) { + this.scode = scode; + } + + public String getBasePackage() { + return basePackage; + } + + public void setBasePackage(String basePackage) { + this.basePackage = basePackage; + } + + public String getSignPackage() { + return signPackage; + } + + public void setSignPackage(String signPackage) { + this.signPackage = signPackage; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getSerialVersionUID() { + return "1" + RandomStringUtils.randomNumeric(18); + } +} \ No newline at end of file diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/TableSchema.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/TableSchema.java new file mode 100644 index 0000000..cc02639 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/bean/TableSchema.java @@ -0,0 +1,49 @@ +package com.jwsaas.powerdesign.parse.bean; + +import java.io.Serializable; + +public class TableSchema implements Serializable { + + private static final long serialVersionUID = -1258282486852764827L; + + private String columnName; + + private String isNullable; + + private String dataType; + + private String columnComment; + + public String getColumnName() { + return columnName; + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public String getIsNullable() { + return isNullable; + } + + public void setIsNullable(String isNullable) { + this.isNullable = isNullable; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public String getColumnComment() { + return columnComment; + } + + public void setColumnComment(String columnComment) { + this.columnComment = columnComment; + } + +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/DataSourceDescriptorException.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/DataSourceDescriptorException.java new file mode 100644 index 0000000..26f27d4 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/DataSourceDescriptorException.java @@ -0,0 +1,22 @@ +package com.jwsaas.powerdesign.parse.exceptions; + +public class DataSourceDescriptorException extends RuntimeException{ + + private static final long serialVersionUID = 5082299003855826096L; + + public DataSourceDescriptorException() { + super(); + } + + public DataSourceDescriptorException(Throwable e) { + super(e); + } + + public DataSourceDescriptorException(String message) { + super(message); + } + + public DataSourceDescriptorException(String message,Throwable e) { + super(message, e); + } +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ErrorContext.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ErrorContext.java new file mode 100644 index 0000000..3fe3456 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ErrorContext.java @@ -0,0 +1,60 @@ +package com.jwsaas.powerdesign.parse.exceptions; + +public class ErrorContext { + + private static final String LINE_SEPARATOR = System.getProperty("line.separator", "\n"); + private static final ThreadLocal LOCAL = new ThreadLocal(); + + private String message; + + private Throwable cause; + + private ErrorContext() { + } + + public static ErrorContext instance() { + ErrorContext context = LOCAL.get(); + if (context == null) { + context = new ErrorContext(); + LOCAL.set(context); + } + return context; + } + + public ErrorContext message(String message) { + this.message = message; + return this; + } + + public ErrorContext cause(Throwable cause) { + this.cause = cause; + return this; + } + + public ErrorContext reset() { + message = null; + cause = null; + LOCAL.remove(); + return this; + } + + public String toString() { + StringBuffer description = new StringBuffer(); + + // message + if (this.message != null) { + description.append(LINE_SEPARATOR); + description.append("### "); + description.append(this.message); + } + + // cause + if (cause != null) { + description.append(LINE_SEPARATOR); + description.append("### Cause: "); + description.append(cause.toString()); + } + + return description.toString(); + } +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ExceptionFactory.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ExceptionFactory.java new file mode 100644 index 0000000..0f89597 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ExceptionFactory.java @@ -0,0 +1,60 @@ +package com.jwsaas.powerdesign.parse.exceptions; + +import java.util.Map; + +/** + * + * @author Administrator + * + */ +public class ExceptionFactory { + + /** + * ServiceException + * + * @param message + * @param e + * @return + */ + public static RuntimeException wrapServiceException(String message, Exception e) { + return new ServiceException(ErrorContext.instance().message(message).cause(e).toString(), e); + } + + /** + * ValidationException + * + * @param message + * @param e + * @return + */ + public static RuntimeException wrapValidationException(String message, Throwable e, Map result) { + return new ValidationException(ErrorContext.instance().message(message).cause(e).toString(), e, result); + } + + /** + * DataSourceDescriptorException + * + * @param message + * @param e + * @return + */ + public static RuntimeException wrapDataSourceDescriptorException(String message, Exception e) { + return new DataSourceDescriptorException(ErrorContext.instance().message(message).cause(e).toString(), e); + } + + /** + * DataSourceDescriptorException + * + * @param message + * @param e + * @return + */ + public static RuntimeException wrapDataSourceDescriptorException(String message) { + return new DataSourceDescriptorException(ErrorContext.instance().message(message).toString()); + } + + public static RuntimeException wrapForeignKeyException(String message, Exception e) { + return new ForeignKeyException(ErrorContext.instance().message(message).cause(e).toString(), e); + } + +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ForeignKeyException.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ForeignKeyException.java new file mode 100644 index 0000000..a767d25 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ForeignKeyException.java @@ -0,0 +1,22 @@ +package com.jwsaas.powerdesign.parse.exceptions; + +public class ForeignKeyException extends RuntimeException{ + + private static final long serialVersionUID = 3053852074986193714L; + + public ForeignKeyException() { + super(); + } + + public ForeignKeyException(Throwable e) { + super(e); + } + + public ForeignKeyException(String message) { + super(message); + } + + public ForeignKeyException(String message,Throwable e) { + super(message, e); + } +} diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ServiceException.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ServiceException.java new file mode 100644 index 0000000..416d810 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ServiceException.java @@ -0,0 +1,23 @@ +package com.jwsaas.powerdesign.parse.exceptions; + +public class ServiceException extends RuntimeException { + + private static final long serialVersionUID = -1095971671427544722L; + + public ServiceException() { + super(); + } + + public ServiceException(Throwable e) { + super(e); + } + + public ServiceException(String message) { + super(message); + } + + public ServiceException(String message,Throwable e) { + super(message, e); + } + +} \ No newline at end of file diff --git a/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ValidationException.java b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ValidationException.java new file mode 100644 index 0000000..98b1414 --- /dev/null +++ b/food-pdm-tools/src/main/java/com/jwsaas/powerdesign/parse/exceptions/ValidationException.java @@ -0,0 +1,23 @@ +package com.jwsaas.powerdesign.parse.exceptions; + +import java.util.Map; + +public class ValidationException extends RuntimeException{ + + private static final long serialVersionUID = -4820402020206751860L; + + private Map result; + + public ValidationException() { + super(); + } + + public ValidationException(String message,Throwable e,Map result) { + super(message, e); + this.result = result; + } + + public Map getResult() { + return result; + } +} diff --git a/food-pdm-tools/src/main/resources/template/dao.impl.java.ftl b/food-pdm-tools/src/main/resources/template/dao.impl.java.ftl new file mode 100644 index 0000000..3191982 --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/dao.impl.java.ftl @@ -0,0 +1,14 @@ +package ${basePackage}.dao<#if sign != "shared">.${sign}.impl; + +import ${basePackage}.dao<#if sign != "shared">.${sign}.${scode}Dao; +import ${basePackage}.entity<#if sign != "shared">.${sign}.${scode}; +<#if sign != "shared">import com.jwsaas.dao.impl.BaseDaoImpl; +import org.springframework.stereotype.Repository; + +/** + * ${name}数据接口实现 + */ +@Repository(${signPackage} + "${scode}DaoImpl") +public class ${scode}DaoImpl extends BaseDaoImpl<${scode}, String> implements ${scode}Dao { + +} diff --git a/food-pdm-tools/src/main/resources/template/dao.java.ftl b/food-pdm-tools/src/main/resources/template/dao.java.ftl new file mode 100644 index 0000000..22f5dbd --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/dao.java.ftl @@ -0,0 +1,8 @@ +package ${basePackage}.dao<#if sign != "shared">.${sign}; + +import ${basePackage}.entity<#if sign != "shared">.${sign}.${scode}; +<#if sign != "shared">import com.jwsaas.dao.BaseDao; + +public interface ${scode}Dao extends BaseDao<${scode}, String> { + +} diff --git a/food-pdm-tools/src/main/resources/template/entity.java.ftl b/food-pdm-tools/src/main/resources/template/entity.java.ftl new file mode 100644 index 0000000..494d78d --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/entity.java.ftl @@ -0,0 +1,51 @@ +package ${basePackage}.entity<#if sign != "shared">.${sign}; + +import java.util.Date; +import org.apache.ibatis.type.Alias; +<#if sign != "shared">import com.jwsaas.entity.BaseEntity; + +//Generated from PowerDesigner file ,Written by 张莹. + +/** + * 表名称:${name} + * 表代码:${code} + */ +@Alias(${signPackage}+"${scode}") +public class ${scode} extends BaseEntity { + + private static final long serialVersionUID = ${serialVersionUID}L; + + <#assign ignore = ["id", "tenantId", "createUser", "createDate", "modifyUser", "modifyDate"]> + <#list columns as column> + <#if ignore?seq_contains(column.scode)==false> + /** + *${column.name} + */ + private ${column.javaType} ${column.scode}; + + + + + <#list columns as column> + <#if ignore?seq_contains(column.scode)==false> + /** + * 字段名称 :${column.name} + * 数据类型 :${column.type} + * 是否必填 :${column.nullFlag?string('true','false')} + */ + public ${column.javaType} get${column.scode?cap_first}() { + return this.${column.scode}; + } + + /** + * 字段名称 :${column.name} + * 数据类型 :${column.type} + * 是否必填 :${column.nullFlag?string('true','false')} + */ + public void set${column.scode?cap_first}(${column.javaType} ${column.scode}) { + this.${column.scode} = ${column.scode}; + } + + + +} \ No newline at end of file diff --git a/food-pdm-tools/src/main/resources/template/mapper.xml.ftl b/food-pdm-tools/src/main/resources/template/mapper.xml.ftl new file mode 100644 index 0000000..d621041 --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/mapper.xml.ftl @@ -0,0 +1,118 @@ +<#macro mapperEl value>${r"#{"}${value}} +<#macro jspEl value>${r"${"}${value}} + + +.${sign}.${scode}Mapper"> + + + <#list columns as column>`${column.scode}`<#if column_has_next>, + + + + + + + + + + + + + + + + + + + + insert into ${code} + + `id`,`tenantId` + <#assign ignore = ["id", "tenantId", "modifyUser", "modifyDate"]> + <#list columns as column> + <#if ignore?seq_contains(column.scode)==false> + ,`${column.scode}` + + + + + <@mapperEl 'id'/>,<@mapperEl 'tenantId'/> + <#assign ignore = ["id", "tenantId", "modifyUser", "modifyDate"]> + <#list columns as column> + <#if ignore?seq_contains(column.scode)==false> + ,<@mapperEl '${column.scode}'/> + + + + + + + update ${code} + + `tenantId` = <@mapperEl 'tenantId'/> + <#assign ignore = ["id", "tenantId", "createUser", "createDate"]> + <#list columns as column> + <#if ignore?seq_contains(column.scode)==false> + ,`${column.scode}` = <@mapperEl '${column.scode}'/> + + + + where `id` = <@mapperEl 'id'/> + + + + delete from ${code} + where `id` = <@mapperEl 'id'/> + + + + delete from ${code} + <@jspEl 'condition'/> + + + + delete from ${code} + where `tenantId` = <@mapperEl 'tenantId'/> and <@jspEl 'property'/>=<@mapperEl 'value'/> + + + \ No newline at end of file diff --git a/food-pdm-tools/src/main/resources/template/service.impl.java.ftl b/food-pdm-tools/src/main/resources/template/service.impl.java.ftl new file mode 100644 index 0000000..6a42b7f --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/service.impl.java.ftl @@ -0,0 +1,26 @@ +package ${basePackage}.service<#if sign != "shared">.${sign}.impl; + + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import ${basePackage}.dao.BaseDao; +import ${basePackage}.dao<#if sign != "shared">.${sign}.${scode}Dao; +import ${basePackage}.entity<#if sign != "shared">.${sign}.${scode}; +import ${basePackage}.service<#if sign != "shared">.${sign}.${scode}Service; +<#if sign != "shared">import com.jwsaas.service.impl.BaseServiceImpl; + +@Service(${signPackage}+"${scode}ServiceImpl") +public class ${scode}ServiceImpl extends BaseServiceImpl<${scode}, String> implements ${scode}Service{ + + @Resource(name=${signPackage}+"${scode}DaoImpl") + private ${scode}Dao ${scode?uncap_first}Dao; + + @Override + public BaseDao<${scode}, String> getBaseDao() { + return this.${scode?uncap_first}Dao; + } + +} + diff --git a/food-pdm-tools/src/main/resources/template/service.java.ftl b/food-pdm-tools/src/main/resources/template/service.java.ftl new file mode 100644 index 0000000..bf99cb0 --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/service.java.ftl @@ -0,0 +1,11 @@ +package ${basePackage}.service<#if sign != "shared">.${sign}; + +import ${basePackage}.entity<#if sign != "shared">.${sign}.${scode}; +<#if sign != "shared">import com.jwsaas.service.BaseService; + +/** + * ${name}数据接口 + */ +public interface ${scode}Service extends BaseService<${scode}, String> { + +} diff --git a/food-pdm-tools/src/main/resources/template/spring.reference.xml.ftl b/food-pdm-tools/src/main/resources/template/spring.reference.xml.ftl new file mode 100644 index 0000000..f68d5bf --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/spring.reference.xml.ftl @@ -0,0 +1,13 @@ +<#macro mapperEl value>${r"#{"}${value}} +<#macro jspEl value>${r"${"}${value}} + +<#list tableList as table> + +.${table.sign}.${table.scode}Service" + version="<@jspEl 'reference.version'/>" + group="<@jspEl 'reference.group'/>" timeout="<@jspEl 'reference.timeout'/>" + retries="<@jspEl 'reference.retries'/>" /> + + + + \ No newline at end of file diff --git a/food-pdm-tools/src/main/resources/template/spring.service.xml.ftl b/food-pdm-tools/src/main/resources/template/spring.service.xml.ftl new file mode 100644 index 0000000..34c3893 --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/spring.service.xml.ftl @@ -0,0 +1,13 @@ +<#macro mapperEl value>${r"#{"}${value}} +<#macro jspEl value>${r"${"}${value}} + +<#list tableList as table> + +.${table.sign}.${table.scode}Service" + ref="${table.sign}${table.scode}ServiceImpl" version="<@jspEl 'service.version'/>" + group="<@jspEl 'service.group'/>" timeout="<@jspEl 'service.timeout'/>" + retries="<@jspEl 'service.retries'/>" /> + + + + diff --git a/food-pdm-tools/src/main/resources/template/spring.test.xml.ftl b/food-pdm-tools/src/main/resources/template/spring.test.xml.ftl new file mode 100644 index 0000000..5a62f6a --- /dev/null +++ b/food-pdm-tools/src/main/resources/template/spring.test.xml.ftl @@ -0,0 +1,13 @@ +<#macro mapperEl value>${r"#{"}${value}} +<#macro jspEl value>${r"${"}${value}} + +<#list tableList as table> + +.${table.sign}.${table.scode}Service" + version="<@jspEl 'reference.version'/>" + group="<@jspEl 'reference.group'/>" timeout="<@jspEl 'reference.timeout'/>" + retries="<@jspEl 'reference.retries'/>" url="<@jspEl 'reference.url'/>" /> + + + + \ No newline at end of file