From 8dc4aa7a7149596822b61d8a27809649e7fad9e9 Mon Sep 17 00:00:00 2001 From: fanchunshuai <2217011466@qq.com> Date: Sun, 29 Aug 2021 14:33:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0plantuml=20er=E7=B1=BB?= =?UTF-8?q?=E5=9B=BE=E8=A7=A3=E6=9E=90=E4=B8=BAsql=E8=AF=AD=E5=8F=A5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changeList | 5 + codemaker-dberparse/pom.xml | 68 +++++ .../codemaker/dberparse/Constants.java | 25 ++ .../dberparse/ERPantUMLParseService.java | 22 ++ .../dberparse/ERPantUMLParseServiceImpl.java | 265 ++++++++++++++++++ .../coderman/codemaker/dberparse/Main.java | 39 +++ .../codemaker/dberparse/bean/EntityBean.java | 63 +++++ .../dberparse/bean/EntityFieldBean.java | 101 +++++++ .../dberparse/bean/ParseRequestBean.java | 39 +++ .../dberparse/enums/ColumnTypeEnums.java | 51 ++++ .../codemaker/dberparse/package-info.java | 1 + .../resources/er-plantuml/recruit-db.puml | 228 +++++++++++++++ codemaker-dbops/pom.xml | 8 +- .../controller/GeneratorSqlDDLController.java | 48 ++++ .../dbops/service/DBErParseService.java | 25 ++ .../dbops/service/DBErParseServiceImpl.java | 41 +++ .../src/main/resources/application.properties | 1 + .../main/resources/er-plantuml/auth-db.puml | 191 +++++++++++++ .../resources/er-plantuml/busorder-db.puml | 109 +++++++ .../src/main/resources/er-plantuml/hr-db.puml | 217 ++++++++++++++ .../resources/er-plantuml/recruit-db.puml | 228 +++++++++++++++ .../main/resources/er-plantuml/user-db.puml | 71 +++++ .../dbops/CodemakerDbopsApplicationTests.java | 2 +- moduleFile | 3 + 24 files changed, 1849 insertions(+), 2 deletions(-) create mode 100644 codemaker-dberparse/pom.xml create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/Constants.java create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/ERPantUMLParseService.java create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/ERPantUMLParseServiceImpl.java create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/Main.java create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/EntityBean.java create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/EntityFieldBean.java create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/ParseRequestBean.java create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/enums/ColumnTypeEnums.java create mode 100644 codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/package-info.java create mode 100644 codemaker-dberparse/src/main/resources/er-plantuml/recruit-db.puml create mode 100644 codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/controller/GeneratorSqlDDLController.java create mode 100644 codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/service/DBErParseService.java create mode 100644 codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/service/DBErParseServiceImpl.java create mode 100644 codemaker-dbops/src/main/resources/er-plantuml/auth-db.puml create mode 100644 codemaker-dbops/src/main/resources/er-plantuml/busorder-db.puml create mode 100644 codemaker-dbops/src/main/resources/er-plantuml/hr-db.puml create mode 100644 codemaker-dbops/src/main/resources/er-plantuml/recruit-db.puml create mode 100644 codemaker-dbops/src/main/resources/er-plantuml/user-db.puml diff --git a/changeList b/changeList index b940acd..b9707e7 100644 --- a/changeList +++ b/changeList @@ -56,3 +56,8 @@ 9.整体上支持基于数据库表结构的代码生成和基于plantUML类图文档的代码生成 + 8. V0.0.2版本 + 本次版本新增codemaker-dberparse模块,支持plantuml er图解析为sql ddl create语句,已集成到codemaker-dbops + 模块中。 + + diff --git a/codemaker-dberparse/pom.xml b/codemaker-dberparse/pom.xml new file mode 100644 index 0000000..38d1c10 --- /dev/null +++ b/codemaker-dberparse/pom.xml @@ -0,0 +1,68 @@ + + + + 4.0.0 + + com.coderman.codermaker.dberparse + codemaker-dberparse + 1.0.0-SNAPSHOT + + codemaker-dberparse + + http://www.example.com + + jar + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + + commons-lang + commons-lang + 2.4 + + + + com.alibaba + fastjson + 1.2.72 + + + commons-io + commons-io + 2.7 + compile + + + org.springframework + spring-core + 5.1.10.RELEASE + compile + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/Constants.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/Constants.java new file mode 100644 index 0000000..768be8a --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/Constants.java @@ -0,0 +1,25 @@ +package com.coderman.codemaker.dberparse; + +/** + * Description: + * date: 2021/8/19 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class Constants { + /** + * 主键ID + */ + public static final String PKEY = "pkey"; + /** + * 是否是联合索引 + */ + public static final String UKEY = "ukey"; + + /** + * 是否是普通索引 + */ + public static final String KEY = "key"; +} diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/ERPantUMLParseService.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/ERPantUMLParseService.java new file mode 100644 index 0000000..5b04627 --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/ERPantUMLParseService.java @@ -0,0 +1,22 @@ +package com.coderman.codemaker.dberparse; + +import com.coderman.codemaker.dberparse.bean.ParseRequestBean; + +import java.util.List; + +/** + * Description: + * date: 2021/8/12 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public interface ERPantUMLParseService { + /** + * e-r图解析入口 + * @param contentList + * @return 解析完成的DDL语句 + */ + List parseERPlantUML(List contentList); +} diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/ERPantUMLParseServiceImpl.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/ERPantUMLParseServiceImpl.java new file mode 100644 index 0000000..3e528cd --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/ERPantUMLParseServiceImpl.java @@ -0,0 +1,265 @@ +package com.coderman.codemaker.dberparse; + +import com.alibaba.fastjson.JSON; +import com.coderman.codemaker.dberparse.bean.EntityBean; +import com.coderman.codemaker.dberparse.bean.EntityFieldBean; +import com.coderman.codemaker.dberparse.bean.ParseRequestBean; +import com.coderman.codemaker.dberparse.enums.ColumnTypeEnums; +import org.apache.commons.lang.StringUtils; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * date: 2021/8/12 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class ERPantUMLParseServiceImpl implements ERPantUMLParseService { + @Override + public List parseERPlantUML(List contentList) { + List list = getPlantUmlContextBean(contentList); + System.out.println(JSON.toJSONString(list)); + List ddlList = new ArrayList<>(); + list.stream().forEach(tableEntity-> ddlList.add(getDDLSQL(tableEntity))); + return ddlList; + } + + + /** + * 通过表字段模型构建DDL sql + * @param tableBean + * @return + */ + private String getDDLSQL(EntityBean tableBean){ + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.append("CREATE TABLE `" + tableBean.getTableName()+"`("); + for (EntityFieldBean entityFieldBean : tableBean.getColumnBeanList()){ + sqlBuilder.append("`" + entityFieldBean.getColumnName() + "` "); + sqlBuilder.append(entityFieldBean.getColumnType()); + if(entityFieldBean.getColumnName().equals("id")){ + sqlBuilder.append(" NOT NULL AUTO_INCREMENT "); + }else { + sqlBuilder.append(" NOT NULL DEFAULT "+entityFieldBean.getDefaultValue()); + } + sqlBuilder.append(" COMMENT '"+entityFieldBean.getColumnDesc()+"',"); + } + + if(!CollectionUtils.isEmpty(tableBean.getIndexBeanList())){ + for (EntityFieldBean indexFieldBean : tableBean.getIndexBeanList()){ + if(indexFieldBean.getPkey() != null && indexFieldBean.getPkey()){ + sqlBuilder.append(" PRIMARY KEY (`"+indexFieldBean.getColumnName()+"`),"); + continue; + } + + if(indexFieldBean.getUKey() != null && indexFieldBean.getUKey()){ + String uKeyName = getUkeyIndexName(indexFieldBean.getColumnName()); + String uColumnNames = getUkeyColumnName(indexFieldBean.getColumnName()); + sqlBuilder.append(" UNIQUE KEY `"+uKeyName+"` ("+uColumnNames+") COMMENT '联合唯一索引',"); + continue; + } + + sqlBuilder.append(" KEY `idx_"+indexFieldBean.getColumnName()+"` (`"+indexFieldBean.getColumnName()+"`),"); + } + + } + + + sqlBuilder = sqlBuilder.deleteCharAt(sqlBuilder.length()-1); + sqlBuilder.append(") ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = '"+tableBean.getTableDesc()+"';\n"); + System.out.println(sqlBuilder.toString()); + return sqlBuilder.toString(); + } + + + + private String getUkeyIndexName(String columns){ + String [] arr = columns.split(","); + StringBuilder builder = new StringBuilder("uniq"); + for (String col : arr){ + builder.append("_"+col.substring(0,1)); + } + return builder.toString(); + } + + /** + * 处理联合主键 + * @param columns + * @return + */ + private String getUkeyColumnName(String columns){ + String [] arr = columns.split(","); + StringBuilder builder = new StringBuilder(); + for (String col : arr){ + builder.append("`"+col+"`,"); + } + return builder.deleteCharAt(builder.length()-1).toString(); + } + + + /** + * 解析plantUML文件内容 + * @return + */ + private List getPlantUmlContextBean(List contentList){ + List elementList = new ArrayList<>(); + List entityBeanList = new ArrayList<>(); + //对entity进行解析 + for(String str : contentList){ + if(StringUtils.isEmpty(str) || str.contains("@startuml") || str.contains("package")){ + continue; + } + + if(str.trim().contains("{")){ + elementList.add(str.trim()); + continue; + } + + if(str.trim().contains("}")){ + elementList.add(str.trim()); + parseClassElement(elementList,entityBeanList); + elementList.clear(); + continue; + } + if(str.trim().contains(":") || (str.trim().contains("key") && str.trim().contains("extend"))){ + elementList.add(str.trim()); + } + } + + return entityBeanList; + } + + + /** + * 解析文件内容整体路由 + * @param elementList + * @param entityBeanList + */ + private void parseClassElement(List elementList, List entityBeanList){ + EntityBean columnBean = buildClassBean(elementList); + entityBeanList.add(columnBean); + } + + + + /** + * 解析class类型数据 + * @param elementList + * @return + */ + private EntityBean buildClassBean(List elementList ){ + EntityBean entityBean = new EntityBean(); + + String[] array = elementList.get(0).trim().replace("{","").trim().split(" "); + + String classMetaInfoArr = array[1]; + List columnBeanList = getColumnBeanList(elementList.subList(1,elementList.size())); + List indexBeanList = getIndexBeanList(elementList.subList(1,elementList.size())); + entityBean.setColumnBeanList(columnBeanList); + entityBean.setIndexBeanList(indexBeanList); + if(classMetaInfoArr.contains("-")){ + entityBean.setTableName(classMetaInfoArr.split("-")[0].replace("\"","")); + entityBean.setTableDesc(classMetaInfoArr.split("-")[1].replace("\"","")); + }else { + entityBean.setTableName(classMetaInfoArr.replace("\"","")); + entityBean.setTableDesc(array[2].replace("\"","")); + } + + return entityBean; + } + + + /** + * 获取表字段信息 + * @param elementList + * @return + */ + private List getColumnBeanList(List elementList){ + List fieldBeanList = new ArrayList<>(); + + for (String fieldStr : elementList){ + if(fieldStr.contains("key") && fieldStr.contains("extend")){ + break; + } + + if(!fieldStr.trim().contains(":")){ + continue; + } + + String[] fieldArr = fieldStr.trim().split(":"); + EntityFieldBean entityFieldBean = new EntityFieldBean(); + String [] tagArr = fieldArr[1].split("/"); + + entityFieldBean.setColumnDesc(tagArr[0]); + entityFieldBean.setColumnName(fieldArr[0]); + if(tagArr.length == 2) { + entityFieldBean.setColumnType(tagArr[1]); + } + if(tagArr.length == 3) { + entityFieldBean.setDefaultValue(tagArr[1]); + entityFieldBean.setColumnType(tagArr[2]); + } + if (StringUtils.isEmpty(entityFieldBean.getDefaultValue())){ + if(ColumnTypeEnums.isInt(entityFieldBean.getColumnType())){ + entityFieldBean.setDefaultValue("0"); + } + if(ColumnTypeEnums.isVarchar(entityFieldBean.getColumnType())){ + entityFieldBean.setDefaultValue("''"); + } + if(ColumnTypeEnums.isDate(entityFieldBean.getColumnType())){ + entityFieldBean.setDefaultValue("'2000-01-01 00:00:00'"); + } + } + entityFieldBean.setNullable(false); + fieldBeanList.add(entityFieldBean); + } + return fieldBeanList; + } + + /** + * 获取索引信息 + * @param elementList + * @return + */ + private List getIndexBeanList(List elementList){ + List indexBeanList = new ArrayList<>(); + int index = 0; + for (int i = 0;i < elementList.size();i ++){ + + if(elementList.get(i).contains("key") && elementList.get(i).contains("extend")){ + index = i+1; + break; + } + } + + + for (String fieldStr : elementList.subList(index,elementList.size())){ + EntityFieldBean indexFieldBean =new EntityFieldBean(); + if(!fieldStr.contains(":")){ + continue; + } + String [] indexArr = fieldStr.split(":"); + if(indexArr[0].toLowerCase().equals(Constants.PKEY)){ + indexFieldBean.setPkey(true); + indexFieldBean.setColumnName(indexArr[1]); + indexBeanList.add(indexFieldBean); + } + if(indexArr[0].toLowerCase().equals(Constants.UKEY)){ + indexFieldBean.setUKey(true); + indexFieldBean.setColumnName(indexArr[1]); + indexBeanList.add(indexFieldBean); + } + if(indexArr[0].toLowerCase().equals(Constants.KEY)){ + indexFieldBean.setColumnName(indexArr[1]); + indexBeanList.add(indexFieldBean); + } + + } + return indexBeanList; + } + +} diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/Main.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/Main.java new file mode 100644 index 0000000..79bbda8 --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/Main.java @@ -0,0 +1,39 @@ +package com.coderman.codemaker.dberparse; + +import com.coderman.codemaker.dberparse.bean.ParseRequestBean; +import org.apache.commons.io.FileUtils; +import org.springframework.util.ResourceUtils; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +/** + * Description: + * date: 2021/8/12 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class Main { + public static void main(String[] args) { + ERPantUMLParseService erPantUMLParseService = new ERPantUMLParseServiceImpl(); + + erPantUMLParseService.parseERPlantUML(readPlantUMLContent()); + } + + /** + * 读取plantUMl文件 + * @return + */ + private static List readPlantUMLContent(){ + try { + File file = ResourceUtils.getFile("classpath:er-plantuml/"+"recruit-db.puml"); + return FileUtils.readLines(file,"UTF-8"); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/EntityBean.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/EntityBean.java new file mode 100644 index 0000000..2d5960b --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/EntityBean.java @@ -0,0 +1,63 @@ +package com.coderman.codemaker.dberparse.bean; + +import java.util.List; + +/** + * Description: + * date: 2021/8/12 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + * 表entity模型 + */ +public class EntityBean { + /** + * 表名称 + */ + private String tableName; + /** + * 表描述 + */ + private String tableDesc; + /** + * 表字段列表 + */ + private List columnBeanList; + /** + * 表索引列表 + */ + private List indexBeanList; + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getTableDesc() { + return tableDesc; + } + + public void setTableDesc(String tableDesc) { + this.tableDesc = tableDesc; + } + + public List getColumnBeanList() { + return columnBeanList; + } + + public void setColumnBeanList(List columnBeanList) { + this.columnBeanList = columnBeanList; + } + + public List getIndexBeanList() { + return indexBeanList; + } + + public void setIndexBeanList(List indexBeanList) { + this.indexBeanList = indexBeanList; + } +} diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/EntityFieldBean.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/EntityFieldBean.java new file mode 100644 index 0000000..ca9b0c2 --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/EntityFieldBean.java @@ -0,0 +1,101 @@ +package com.coderman.codemaker.dberparse.bean; + +/** + * Description: + * date: 2021/8/12 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + * 表字段模型 + */ +public class EntityFieldBean { + /** + * 字段名称 + */ + private String columnName; + /** + * 字段数据类型包括大小 + */ + private String columnType; + /** + * 字段描述 + */ + private String columnDesc; + + /** + * 是否可为空 + */ + private Boolean nullable; + + /** + * 字段默认值 + */ + private String defaultValue; + + /** + * 是否是主键 + */ + private Boolean isPkey; + + /** + * 是否是联合索引 + */ + private Boolean isUKey; + + public Boolean getUKey() { + return isUKey; + } + + public void setUKey(Boolean UKey) { + isUKey = UKey; + } + + public Boolean getPkey() { + return isPkey; + } + + public void setPkey(Boolean pkey) { + isPkey = pkey; + } + + public String getColumnName() { + return columnName; + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public String getColumnType() { + return columnType; + } + + public void setColumnType(String columnType) { + this.columnType = columnType; + } + + public String getColumnDesc() { + return columnDesc; + } + + public void setColumnDesc(String columnDesc) { + this.columnDesc = columnDesc; + } + + public Boolean getNullable() { + return nullable; + } + + public void setNullable(Boolean nullable) { + this.nullable = nullable; + } + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } +} diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/ParseRequestBean.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/ParseRequestBean.java new file mode 100644 index 0000000..b3ceb58 --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/bean/ParseRequestBean.java @@ -0,0 +1,39 @@ +package com.coderman.codemaker.dberparse.bean; + +import java.util.List; + +/** + * Description: + * date: 2021/8/12 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public class ParseRequestBean { + + /** + * 解析出产生的sql脚本文件存放目录 + */ + private String sqlFilePath; + /** + * er图的plantUML内容 + */ + private List contentList; + + public String getSqlFilePath() { + return sqlFilePath; + } + + public void setSqlFilePath(String sqlFilePath) { + this.sqlFilePath = sqlFilePath; + } + + public List getContentList() { + return contentList; + } + + public void setContentList(List contentList) { + this.contentList = contentList; + } +} diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/enums/ColumnTypeEnums.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/enums/ColumnTypeEnums.java new file mode 100644 index 0000000..f28748d --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/enums/ColumnTypeEnums.java @@ -0,0 +1,51 @@ +package com.coderman.codemaker.dberparse.enums; + +/** + * Description: + * date: 2021/8/13 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public enum ColumnTypeEnums { + VARCHAR("varchar"), + INT("int"), + DATE("date"), + TEXT("text"), + TIMESTAMP("timestamp"), + BIGINT("bigint"), + TINYINT("tinyint"), + + ; + private String columnType; + ColumnTypeEnums(String columnType){ + this.columnType = columnType; + } + + + public String getColumnType() { + return columnType; + } + + public static Boolean contains(String columnTypeTag){ + for (ColumnTypeEnums columnTypeEnums : ColumnTypeEnums.values()){ + if(columnTypeTag.startsWith(columnTypeEnums.getColumnType())){ + return true; + } + } + return false; + } + + public static Boolean isInt(String columnTypeTag){ + return columnTypeTag.contains("int"); + } + + public static Boolean isVarchar(String columnTypeTag){ + return columnTypeTag.contains("varchar") || columnTypeTag.contains("text"); + } + + public static Boolean isDate(String columnTypeTag){ + return columnTypeTag.contains("timestamp") || columnTypeTag.contains("date"); + } +} diff --git a/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/package-info.java b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/package-info.java new file mode 100644 index 0000000..242f2f4 --- /dev/null +++ b/codemaker-dberparse/src/main/java/com/coderman/codemaker/dberparse/package-info.java @@ -0,0 +1 @@ +package com.coderman.codemaker.dberparse; \ No newline at end of file diff --git a/codemaker-dberparse/src/main/resources/er-plantuml/recruit-db.puml b/codemaker-dberparse/src/main/resources/er-plantuml/recruit-db.puml new file mode 100644 index 0000000..970b935 --- /dev/null +++ b/codemaker-dberparse/src/main/resources/er-plantuml/recruit-db.puml @@ -0,0 +1,228 @@ +@startuml +' hide the spot +hide circle + +' avoid problems with angled crows feet +skinparam linetype ortho + + +entity "resume_basic 简历库信息表" as resume_basic{ + id: 主键/bigint(20) unsigned + resume_name: 简历文件名/varchar(100) + chinese_name: 简历人员姓名姓名/varchar(30) + hand_phone: 应聘人员电话/varchar(30) + email_account: 个人邮箱/varchar(100) + status: 简历状态/0/tinyint(4) + work_status:应聘工作状态/tinyint(4) + resource: 简历来源/tinyint(4) + create_time:录入时间/timestamp + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:chinese_name + Key:hand_phone + UKey:chinese_name,hand_phone +} + + +entity "resume_education 简历教育信息表" as resume_education{ + id: 主键/bigint(20) unsigned + resume_id: 简历ID/bigint(20) + school_name: 学校名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + education_background:获取学历/varchar(30) + --key extend -- + PKey:id + Key:resume_id +} + +entity "resume_workexperience 简历工作经历信息表" as resume_workexperience{ + id: 主键/bigint(20) unsigned + resume_id: 简历ID/0/bigint(20) + company: 公司名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + content:工作内容描述/varchar(2000) + --key extend -- + PKey:id + Key:resume_id +} + +entity "interview_process_config 面试流程配置表" as interview_process_config{ + id: 主键/bigint(20) unsigned + staff_id: 员工ID/0/bigint(20) + emergency_name: 紧急联系人名称/varchar(30) + hand_phone: 紧急联系人电话/varchar(30) + relation: 紧急联系人关系/varchar(30) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:staff_id +} + +entity "post_publish_config-职位发布配置表" as post_publish_config{ + id: 主键/bigint(20) unsigned + department_name: 部门名称/varchar(60) + level: 部门级别/tinyint(4) + manager_id: 部门管理员/bigint(20) + level_link: 链式部门/varchar(60) + parent_id: 父级部门ID/bigint(20) + status:部门状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:parent_id +} + +entity "post-职位信息表" as post{ + id: 主键/bigint(20) unsigned + post_name: 岗位名称/varchar(60) + levels: 岗位支持级别/varchar(100) + content: 职位职责内容/varchar(1000) + sort: 岗位序列/varchar(60) + status: 岗位状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + + +entity "interview_invitation 面试邀请表" as interview_invitation{ + id: 主键/bigint(20) unsigned + post_id: 职位ID/bigint(20) + user_id: 邀请人/bigint(20) + invitation_date: 邀请时间/date + resume_id: 简历ID/bigint(20) + resources: 简历来源/bigint(20) + internal_recommended: 是否是内推/tinyint(4) + processStatus:面试流程状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:post_id + Key:user_id +} + + +entity "interview_comment-面试评价与反馈表" as interview_comment{ + id: 主键/bigint(20) unsigned + post_id: 职位ID/0/bigint(20) + content: 应聘人员反馈/varchar(1000) + sort: 面试场次/1/tinyint(4) + interviewer_user_id: 面试官ID/bigint(20) + feed_back_time:应聘人员反馈时间/timestamp + interviewerComment:面试官评价/varchar(1000) + comment_time:面试官评价时间/timestamp + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:post_id + Key:interviewer_user_id + +} + + +entity "applicant_regist_record 应聘人员登记表" as applicant_regist_record{ + id: 主键/bigint(20) unsigned + chinese_name:应聘人员名称/varchar(60) + hand_phone:应聘人员电话/varchar(60) + email_account:个人邮箱/varchar(60) + status:应聘人员状态/tinyint(4) + card_number:应聘人员身份证号/varchar(60) + nation:民族/varchar(60) + home_city_id:户籍所在城市/bigint(20) + home_city_came:户籍所在城市名称/varchar(60) + marital_status:婚姻状况/tinyint(4) + current_address:现住地址/varchar(60) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/0/bigint(20) + create_user_id:创建人/0/bigint(20) + --key extend -- + PKey:id + Key:leave_apply_id +} + +entity "applicant_education 简历教育信息表" as resume_education{ + id: 主键/bigint(20) unsigned + applicant_id: 简历ID/bigint(20) + school_name: 学校名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + education_background:获取学历/varchar(30) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:applicant_id +} + +entity "applicant_workexperience 简历工作经历信息表" as resume_workexperience{ + id: 主键/bigint(20) unsigned + applicant_id: 简历ID/bigint(20) + company: 公司名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + content:工作内容描述/varchar(2000) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:applicant_id +} + +entity "internal_recommand_config-内推奖励配置表" as internal_recommand_config{ + id: 主键/bigint(20) unsigned + department_id: 二级部门ID/bigint(20) + post_level: 职位内推奖励最低级别/bigint(20) + month:入职时长/tinyint(4) + amount:奖励金额/int(11) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + +entity "offer_record-offer记录表" as OfferRecordBO{ + id: 主键/bigint(20) unsigned + offer_name:offer名称/varchar(100) + applicant_email:应聘人员邮箱/varchar(60) + applicant_id:应聘人员ID/bigint(20) + offer_status:offer状态/tinyint(4) + content:offer内容/text + offer_follow_userid:offer跟进人/bigint(20) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) +} + + +@enduml \ No newline at end of file diff --git a/codemaker-dbops/pom.xml b/codemaker-dbops/pom.xml index 710f53a..b06a11e 100644 --- a/codemaker-dbops/pom.xml +++ b/codemaker-dbops/pom.xml @@ -10,7 +10,7 @@ com.coderman.codemaker.dbops codemaker-dbops - 0.0.1-SNAPSHOT + 0.0.2-SNAPSHOT codemaker-dbops codemaker for dbops @@ -69,6 +69,12 @@ fastjson 1.2.72 + + + com.coderman.codermaker.dberparse + codemaker-dberparse + 1.0.0-SNAPSHOT + diff --git a/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/controller/GeneratorSqlDDLController.java b/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/controller/GeneratorSqlDDLController.java new file mode 100644 index 0000000..e92c8ab --- /dev/null +++ b/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/controller/GeneratorSqlDDLController.java @@ -0,0 +1,48 @@ +package com.coderman.codemaker.dbops.controller; + +import com.coderman.codemaker.dberparse.bean.ParseRequestBean; +import com.coderman.codemaker.dbops.service.DBErParseService; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ResourceUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +/** + * Description: + * date: 2021/8/24 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@RestController +public class GeneratorSqlDDLController { + @Autowired + private DBErParseService dbErParseService; + + /** + * 从uml类图文件中生成DDL语句 + * @param fileName + * @return + */ + @GetMapping(value = "/getsqlddl") + public String getSqlDDL(@RequestParam(name = "fileName") String fileName){ + File file = null; + try { + file = ResourceUtils.getFile("classpath:er-plantuml/"+fileName+".puml"); + dbErParseService.parseERPlantUML(FileUtils.readLines(file,"UTF-8"),fileName); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return "success:"+"fileName.sql 文件在er-sql文件夹下"; + + } +} diff --git a/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/service/DBErParseService.java b/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/service/DBErParseService.java new file mode 100644 index 0000000..071ba1b --- /dev/null +++ b/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/service/DBErParseService.java @@ -0,0 +1,25 @@ +package com.coderman.codemaker.dbops.service; + +import com.coderman.codemaker.dberparse.bean.ParseRequestBean; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; + +/** + * Description: + * date: 2021/8/24 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +public interface DBErParseService { + /** + * e-r图解析包装服务类 + * @param contentList + * @param fileName + * @return + */ + List parseERPlantUML(List contentList,String fileName) throws IOException; +} diff --git a/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/service/DBErParseServiceImpl.java b/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/service/DBErParseServiceImpl.java new file mode 100644 index 0000000..05d4371 --- /dev/null +++ b/codemaker-dbops/src/main/java/com/coderman/codemaker/dbops/service/DBErParseServiceImpl.java @@ -0,0 +1,41 @@ +package com.coderman.codemaker.dbops.service; + +import com.coderman.codemaker.dberparse.ERPantUMLParseService; +import com.coderman.codemaker.dberparse.ERPantUMLParseServiceImpl; +import com.coderman.codemaker.dberparse.bean.ParseRequestBean; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; + +/** + * Description: + * date: 2021/8/24 + * + * @author fanchunshuai + * @version 1.0.0 + * @since JDK 1.8 + */ +@Service +@Component +public class DBErParseServiceImpl implements DBErParseService{ + private ERPantUMLParseService erPantUMLParseService = new ERPantUMLParseServiceImpl(); + @Value("${sqlfile.path}") + private String path; + @Override + public List parseERPlantUML(List contentList,String fileName) throws IOException { + List sqlContent = erPantUMLParseService.parseERPlantUML(contentList); + File file = new File(path+"/"+fileName+".sql"); + if(!file.exists()){ + file.createNewFile(); + } + FileUtils.writeLines(file,sqlContent); + return sqlContent; + } +} diff --git a/codemaker-dbops/src/main/resources/application.properties b/codemaker-dbops/src/main/resources/application.properties index 78436d1..f344820 100644 --- a/codemaker-dbops/src/main/resources/application.properties +++ b/codemaker-dbops/src/main/resources/application.properties @@ -1 +1,2 @@ server.port=8097 +sqlfile.path=/Users/dasouche/scworkspace/sourceSpace/code-maker/codemaker-dbops/er-sql \ No newline at end of file diff --git a/codemaker-dbops/src/main/resources/er-plantuml/auth-db.puml b/codemaker-dbops/src/main/resources/er-plantuml/auth-db.puml new file mode 100644 index 0000000..ebe5059 --- /dev/null +++ b/codemaker-dbops/src/main/resources/er-plantuml/auth-db.puml @@ -0,0 +1,191 @@ +@startuml +' hide the spot +hide circle + +' avoid problems with angled crows feet +skinparam linetype ortho + + +entity "user_group-用户组" as user_group{ + id: 主键/bigint(20) unsigned + group_name:用户组名/varchar(50) + group_code:用户组编码/varchar(50) + status: 用户组状态/bigint(20) + user_list:用户组内用户列表/varchar(2000) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + +entity "role-角色表" as role{ + id: 主键/bigint(20) unsigned + role_name:角色名称/varchar(50) + role_code:角色编码/varchar(50) + status: 角色组状态/bigint(20) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + +entity "role_group-角色组" as role_group{ + id: 主键/bigint(20) unsigned + group_name:角色组名/varchar(50) + group_code:角色组编码/varchar(50) + role_code_list:角色列表/varchar(2000) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + + + +entity "user_role_mapping 用户角色关联表" as user_role_mapping{ + id: 主键/bigint(20) unsigned + user_id:用户ID/bigint(20) + role_code:角色code/varchar(50) + --key extend -- + PKey:id + +} + + + +entity "authority-抽象权限表" as authority{ + id: 主键/bigint(20) unsigned + auth_code:权限编码/varchar(50) + authority_type:权限类型/tinyint(4) + role_code:关联角色编码/varchar(50) + role_group_code:关联角色组/varchar(50) + status:权限状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + +} + +entity "data_authority-数据字段权限" as data_authority{ + id: 主键/bigint(20) unsigned + auth_code:权限标示/varchar(50) + data_column_id:业务数据库标示/varchar(50) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + + +entity "admin_authority-行政数据权限" as admin_authority{ + id: 主键/bigint(20) unsigned + auth_code:权限标示/varchar(50) + department_id:组织部门ID/bigint(20) + city_id:城市权限/bigint(20) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:auth_code +} + + +entity "system_authority-系统菜单权限表" as system_authority{ + id: 主键/bigint(20) unsigned + auth_code:权限标示/varchar(50) + system_code:系统编码/varchar(50) + module_code:菜单编码/varchar(50) + menu_code:按钮编码/varchar(50) + date_create:创建时间/timestamp + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:auth_code +} + + + +entity "system-系统表" as system{ + id: 主键/bigint(20) unsigned + system_name:系统名称/varchar(50) + system_code:系统编码/varchar(50) + system_url:系统域名/varchar(50) + system_picurl:系统图标/varchar(50) + tec_admin_user_id:系统技术负责人/bigint(20) + bus_admin_user_id:系统业务负责人/bigint(20) + department_id:系统所属部门/bigint(20) + date_create:创建时间/timestamp + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:staff_id +} + + +entity "module-菜单模块表" as module{ + id: 主键/bigint(20) unsigned + module_name:菜单名称/varchar(50) + module_code:菜单编码/varchar(50) + system_code:系统编码/varchar(50) + module_url:菜单链接/varchar(50) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:module_code +} + + +entity "menu-按钮表" as menu{ + id: 主键/bigint(20) unsigned + menu_name:按钮名称/varchar(50) + menu_code:按钮编码/varchar(50) + module_code:所属菜单编码/varchar(50) + system_code:所属系统编码/varchar(50) + module_url:菜单链接/varchar(50) + + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + +entity "data_column_config-数据字段管理表" as data_column_config{ + id: 主键/bigint(20) unsigned + bus_database:数据库业务系统名称/varchar(60) + table_name:表名称/varchar(60) + table_desc:表描述/varchar(60) + column_name:字段名称/varchar(60) + column_desc:字段描述/varchar(60) + bus_model:业务模块/varchar(60) + field_name:业务属性名称/varchar(60) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + +@enduml \ No newline at end of file diff --git a/codemaker-dbops/src/main/resources/er-plantuml/busorder-db.puml b/codemaker-dbops/src/main/resources/er-plantuml/busorder-db.puml new file mode 100644 index 0000000..8fb5793 --- /dev/null +++ b/codemaker-dbops/src/main/resources/er-plantuml/busorder-db.puml @@ -0,0 +1,109 @@ +@startuml +' hide the spot +hide circle + +' avoid problems with angled crows feet +skinparam linetype ortho + + +entity "dba_order dba工单表" as dba_order{ + id: 主键/bigint(20) unsigned + dba_biz_order_code:DBA工单编号/varchar(60) + order_type:DBA工单类型/varchar(60) + db_name:数据库名称/varchar(60) + rw_rate:数据库读写比/varchar(60) + size:数据库存储大小/varchar(20) + url:工单附件地址/varchar(100) + content:工单内容/varchar(3000) + status:工单状态/tinyint(4) + apply_reason:申请原因/varchar(300) + biz_order_code:关联业务单号/varchar(60) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:dba_biz_order_code + Key:create_user_id +} + + +entity "busniess_order 业务工单表" as staff_education{ + id: 主键/bigint(20) unsigned + biz_order_code:业务工单编号/varchar(60) + biz_order_type:业务工单类型/varchar(60) + content:工单内容/varchar(300) + bus_line:业务线/varchar(30) + url:工单附件地址/varchar(100) + status:工单状态/tinyint(4) + apply_reason:申请原因/varchar(300) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:biz_order_code + Key:create_user_id + +} + +entity "ops_order 运维工单申请总表" as ops_order{ + id: 主键/bigint(20) unsigned + ops_order_code:工单编号/varchar(60) + ops_order_type:工单类型/varchar(60) + url:工单附件地址/varchar(50) + status:工单状态/tinyint(4) + apply_reason:申请原因/varchar(300) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + + --key extend -- + PKey:id + Key:ops_order_code + Key:create_user_id + +} + +entity "ops_domain_order 服务域名申请表" as ops_domain_order{ + id: 主键/bigint(20) unsigned + ops_order_code:工单编号/varchar(60) + env_type:环境类型/varchar(60) + service_name:关联服务名/varchar(60) + domain_url:域名/varchar(60) + ip_content:IP地址列表/varchar(200) + --key extend -- + PKey:id + Key:ops_order_code +} + +entity "infrast_config_order-服务扩缩容申请表" as infrast_config_order{ + id: 主键/bigint(20) unsigned + ops_order_code:工单编号/varchar(60) + op_type:扩容类型/tinyint(4) + service_name:关联服务名/varchar(60) + ip_content:IP地址列表/varchar(200) + cpu_count:cpu当前核数/tinyint(4) + target_cpu_count:cpu目标核数/tinyint(4) + mem_size:内存当前大小(G)/tinyint(4) + target_mem_size:内存目标大小(G)/tinyint(4) + disk_size:磁盘当前大小(G)/tinyint(4) + target_disk_size:磁盘目标大小(G)/tinyint(4) + --key extend -- + PKey:id + Key:ops_order_code +} + +entity "clust_offline_order 集群下线申请" as service_offline_order{ + ops_order_code:工单编号/varchar(60) + service_name:关联服务名/varchar(60) + ip_content:IP地址列表/varchar(200) + check_user_id:工程效率校验人/bigint(20) + offline_domain:是否下线域名/tinyint(4) +} + + +@enduml \ No newline at end of file diff --git a/codemaker-dbops/src/main/resources/er-plantuml/hr-db.puml b/codemaker-dbops/src/main/resources/er-plantuml/hr-db.puml new file mode 100644 index 0000000..696b72f --- /dev/null +++ b/codemaker-dbops/src/main/resources/er-plantuml/hr-db.puml @@ -0,0 +1,217 @@ +@startuml +' hide the spot +hide circle + +' avoid problems with angled crows feet +skinparam linetype ortho + + +entity "staff_basic-员工基础信息表" as staff_basic{ + id: 主键/bigint(20) unsigned + staff_number: 员工工号/varchar(30) + chinese_name: 员工姓名/varchar(30) + email: 员工邮箱/varchar(60) + department_id: 员工所在部门ID/bigint(20) + pict_url: 员工头像链接/varchar(100) + nick_name: 员工昵称/varchar(100) + card_number: 员工身份证号/varchar(30) + bank_card_number: 员工银行卡号/varchar(30) + bank_name: 工资卡所属银行/varchar(100) + bank_address_name: 工资卡所属分行地址/varchar(100) + leader_id: 员工领导ID/bigint(20) + status: 员工状态/bigint(20) + tec_level: 员工职位级别/varchar(30) + education_background: 员工学历/tinyint(4) + hr_user_id:员工对应hr/bigint(20) + home_city_id:户籍所在城市/bigint(20) + home_city_name:户籍所在城市名称/varchar(50) + marital_status:婚姻状况/tinyint(4) + current_address:现住地址/varchar(200) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + UKey:staff_number,email + Key:email + Key:department_id +} + + +entity "staff_education-员工教育信息表" as staff_education{ + id: 主键/bigint(20) unsigned + staff_id: 员工ID/bigint(20) + school_name: 学校名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + education_background:获取学历/varchar(30) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:staff_id +} + +entity "staff_workexperience-员工工作经历信息表" as staff_workexperience{ + id: 主键/bigint(20) unsigned + staff_id: 员工ID/bigint(20) + company: 公司名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + content:工作内容描述/varchar(2000) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:staff_id +} + +entity "staff_emergency_contact-员工紧急联系人信息表" as staff_emergency_contact{ + id: 主键/bigint(20) unsigned + staff_id: 员工ID/bigint(20) + emergency_name: 紧急联系人名称/varchar(30) + hand_phone: 紧急联系人电话/varchar(30) + relation: 紧急联系人关系/varchar(30) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:staff_id +} + +entity "department-部门信息表" as department{ + id: 主键/bigint(20) unsigned + department_name: 部门名称/varchar(60) + level: 部门级别/tinyint(4) + manager_id: 部门管理员/bigint(20) + level_link: 链式部门/varchar(60) + parent_id: 父级部门ID/bigint(20) + status:部门状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:parent_id +} + +entity "post-岗位信息表" as post{ + id: 主键/bigint(20) unsigned + post_name: 岗位名称/varchar(60) + levels: 岗位支持级别/varchar(100) + content: 职位职责内容/varchar(1000) + sort: 岗位序列/varchar(60) + status: 岗位状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + + +entity "regularization_apply-转正申请表" as regularization_apply{ + id: 主键/bigint(20) unsigned + staff_id: 员工ID/bigint(20) + department_id: 申请人所在部门ID/bigint(20) + apply_date: 申请时间/date + hire_date: 入职时间/date + leader_id: 直属领导ID/bigint(20) + content: 试用期工作内容/varchar(2000) + date_create:创建时间/timestamp + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:staff_id +} + + +entity "leave_apply-离职申请表" as leave_apply{ + id: 主键/bigint(20) unsigned + staff_id: 申请人员工ID/0/bigint(20) + department_id: 申请人所在部门ID/0/bigint(20) + handover: 是否交接完成/0/tinyint(4) + reason: 离职原因/varchar(200) + apply_status: 申请单状态/1/tinyint(4) + date_create:创建时间/timestamp + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:staff_id +} + + +entity "leave_transfer-离职交接单表" as leave_transfer{ + id: 主键/bigint(20) unsigned + handover_title: 交接事项名称/varchar(60) + content: 交接内容/varchar(200) + handover: 是否交接完成/tinyint(4) + handover_user_id: 交接人userid/bigint(20) + transfer_status: 交接状态/tinyint(4) + chinese_name: 交接人姓名/varchar(30) + approval_user_id:审批人ID/bigint(20) + approval_date:审批完成时间/date + leave_apply_id:离职申请单ID/bigint(20) + sort:交接顺序/tinyint(4) + date_create:创建时间/timestamp + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:leave_apply_id +} + + +entity "leave_transfer_config-离职交接配置表" as leave_transfer_config{ + id: 主键/bigint(20) unsigned + handover_title: 交接事项名称/varchar(60) + content: 交接内容/varchar(200) + approval_user_id:审批人ID/bigint(20) + sort:交接顺序/tinyint(4) + department_id:所属二级部门/业务线 + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + +entity "data_column_config-数据字段管理表" as data_column_config{ + id: 主键/bigint(20) unsigned + table_name:表名称/varchar(60) + table_desc:表描述/varchar(60) + column_name:字段名称/varchar(60) + column_desc:字段描述/varchar(60) + bus_model:业务模块/varchar(60) + field_name:业务属性名称/varchar(60) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + + + + + + +staff_basic ||--o{ staff_education +staff_basic ||--o{ staff_emergency_contact +staff_basic ||--o{ staff_workexperience +department ||--o{ staff_basic + + +@enduml \ No newline at end of file diff --git a/codemaker-dbops/src/main/resources/er-plantuml/recruit-db.puml b/codemaker-dbops/src/main/resources/er-plantuml/recruit-db.puml new file mode 100644 index 0000000..970b935 --- /dev/null +++ b/codemaker-dbops/src/main/resources/er-plantuml/recruit-db.puml @@ -0,0 +1,228 @@ +@startuml +' hide the spot +hide circle + +' avoid problems with angled crows feet +skinparam linetype ortho + + +entity "resume_basic 简历库信息表" as resume_basic{ + id: 主键/bigint(20) unsigned + resume_name: 简历文件名/varchar(100) + chinese_name: 简历人员姓名姓名/varchar(30) + hand_phone: 应聘人员电话/varchar(30) + email_account: 个人邮箱/varchar(100) + status: 简历状态/0/tinyint(4) + work_status:应聘工作状态/tinyint(4) + resource: 简历来源/tinyint(4) + create_time:录入时间/timestamp + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:chinese_name + Key:hand_phone + UKey:chinese_name,hand_phone +} + + +entity "resume_education 简历教育信息表" as resume_education{ + id: 主键/bigint(20) unsigned + resume_id: 简历ID/bigint(20) + school_name: 学校名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + education_background:获取学历/varchar(30) + --key extend -- + PKey:id + Key:resume_id +} + +entity "resume_workexperience 简历工作经历信息表" as resume_workexperience{ + id: 主键/bigint(20) unsigned + resume_id: 简历ID/0/bigint(20) + company: 公司名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + content:工作内容描述/varchar(2000) + --key extend -- + PKey:id + Key:resume_id +} + +entity "interview_process_config 面试流程配置表" as interview_process_config{ + id: 主键/bigint(20) unsigned + staff_id: 员工ID/0/bigint(20) + emergency_name: 紧急联系人名称/varchar(30) + hand_phone: 紧急联系人电话/varchar(30) + relation: 紧急联系人关系/varchar(30) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:staff_id +} + +entity "post_publish_config-职位发布配置表" as post_publish_config{ + id: 主键/bigint(20) unsigned + department_name: 部门名称/varchar(60) + level: 部门级别/tinyint(4) + manager_id: 部门管理员/bigint(20) + level_link: 链式部门/varchar(60) + parent_id: 父级部门ID/bigint(20) + status:部门状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:parent_id +} + +entity "post-职位信息表" as post{ + id: 主键/bigint(20) unsigned + post_name: 岗位名称/varchar(60) + levels: 岗位支持级别/varchar(100) + content: 职位职责内容/varchar(1000) + sort: 岗位序列/varchar(60) + status: 岗位状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + + +entity "interview_invitation 面试邀请表" as interview_invitation{ + id: 主键/bigint(20) unsigned + post_id: 职位ID/bigint(20) + user_id: 邀请人/bigint(20) + invitation_date: 邀请时间/date + resume_id: 简历ID/bigint(20) + resources: 简历来源/bigint(20) + internal_recommended: 是否是内推/tinyint(4) + processStatus:面试流程状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:post_id + Key:user_id +} + + +entity "interview_comment-面试评价与反馈表" as interview_comment{ + id: 主键/bigint(20) unsigned + post_id: 职位ID/0/bigint(20) + content: 应聘人员反馈/varchar(1000) + sort: 面试场次/1/tinyint(4) + interviewer_user_id: 面试官ID/bigint(20) + feed_back_time:应聘人员反馈时间/timestamp + interviewerComment:面试官评价/varchar(1000) + comment_time:面试官评价时间/timestamp + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:post_id + Key:interviewer_user_id + +} + + +entity "applicant_regist_record 应聘人员登记表" as applicant_regist_record{ + id: 主键/bigint(20) unsigned + chinese_name:应聘人员名称/varchar(60) + hand_phone:应聘人员电话/varchar(60) + email_account:个人邮箱/varchar(60) + status:应聘人员状态/tinyint(4) + card_number:应聘人员身份证号/varchar(60) + nation:民族/varchar(60) + home_city_id:户籍所在城市/bigint(20) + home_city_came:户籍所在城市名称/varchar(60) + marital_status:婚姻状况/tinyint(4) + current_address:现住地址/varchar(60) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/0/bigint(20) + create_user_id:创建人/0/bigint(20) + --key extend -- + PKey:id + Key:leave_apply_id +} + +entity "applicant_education 简历教育信息表" as resume_education{ + id: 主键/bigint(20) unsigned + applicant_id: 简历ID/bigint(20) + school_name: 学校名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + education_background:获取学历/varchar(30) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:applicant_id +} + +entity "applicant_workexperience 简历工作经历信息表" as resume_workexperience{ + id: 主键/bigint(20) unsigned + applicant_id: 简历ID/bigint(20) + company: 公司名称/varchar(30) + start_date: 开始时间/date + end_date: 结束时间/date + content:工作内容描述/varchar(2000) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:applicant_id +} + +entity "internal_recommand_config-内推奖励配置表" as internal_recommand_config{ + id: 主键/bigint(20) unsigned + department_id: 二级部门ID/bigint(20) + post_level: 职位内推奖励最低级别/bigint(20) + month:入职时长/tinyint(4) + amount:奖励金额/int(11) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id +} + + +entity "offer_record-offer记录表" as OfferRecordBO{ + id: 主键/bigint(20) unsigned + offer_name:offer名称/varchar(100) + applicant_email:应聘人员邮箱/varchar(60) + applicant_id:应聘人员ID/bigint(20) + offer_status:offer状态/tinyint(4) + content:offer内容/text + offer_follow_userid:offer跟进人/bigint(20) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) +} + + +@enduml \ No newline at end of file diff --git a/codemaker-dbops/src/main/resources/er-plantuml/user-db.puml b/codemaker-dbops/src/main/resources/er-plantuml/user-db.puml new file mode 100644 index 0000000..0f180c2 --- /dev/null +++ b/codemaker-dbops/src/main/resources/er-plantuml/user-db.puml @@ -0,0 +1,71 @@ +@startuml +' hide the spot +hide circle + +' avoid problems with angled crows feet +skinparam linetype ortho + + +entity "user_account-用户账号表" as user_account{ + id: 主键/bigint(20) unsigned + user_name: 用户名/varchar(30) + chinese_name: 用户姓名/varchar(30) + password: 密码/varchar(60) + staff_id: 员工ID/bigint(20) + third_user: 是否是三方员工/tinyint(4) + ticket: 登录系统ticket/varchar(100) + ticket_expire_time: ticket有效期/timestamp + last_updatepw_time:上次修改密码的时间/timestamp + hand_phone:用户电话号码/varchar(30) + status: 账号状态/tinyint(4) + date_create:创建时间/timestamp + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + UKey:user_name + Key:staff_id +} + + +entity "third_user-三方用户信息表" as third_user{ + id: 主键/bigint(20) unsigned + email: 用户邮箱/varchar(30) + city_id: 用户所在城市ID/bigint(20) + city_name: 用户所在城市名称/varchar(30) + chinese_name:用户姓名/varchar(30) + hand_phone :用户电话/timestamp + status:用户状态/tinyint(4) + date_update:修改时间/timestamp + update_user_id:修改人/bigint(20) + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:email +} + +entity "login_log-用户登录日志表" as login_log{ + id: 主键/bigint(20) unsigned + login_time: 登录时间/timestamp + user_id: 用户ID/bigint(20) + ticekt:登录ticket/varchar(100) + logout_time:退出时间/timestamp + system_url:登录目标系统域名/varchar(100) + date_create:创建时间/timestamp + create_user_id:创建人/bigint(20) + --key extend -- + PKey:id + Key:user_id +} + + +entity "ding_user_relation-钉钉账号关联关系" as ding_user_relation{ + id: 主键/bigint(20) unsigned + ding_user_id:钉钉账号id/varchar(60) + user_id:用户账号ID/bigint(20) + hand_phone:用户电话信息/varchar(30) + status:关联状态/tinyint(4) +} + +@enduml \ No newline at end of file diff --git a/codemaker-dbops/src/test/java/com/coderman/codemaker/dbops/CodemakerDbopsApplicationTests.java b/codemaker-dbops/src/test/java/com/coderman/codemaker/dbops/CodemakerDbopsApplicationTests.java index cb7d5b5..5017869 100644 --- a/codemaker-dbops/src/test/java/com/coderman/codemaker/dbops/CodemakerDbopsApplicationTests.java +++ b/codemaker-dbops/src/test/java/com/coderman/codemaker/dbops/CodemakerDbopsApplicationTests.java @@ -1,6 +1,6 @@ package com.coderman.codemaker.dbops; -import org.junit.jupiter.api.Test; +import org.junit.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest diff --git a/moduleFile b/moduleFile index 9823b0f..011596c 100644 --- a/moduleFile +++ b/moduleFile @@ -25,3 +25,6 @@ cola-domain:cola应用的domain模块,属于领域层,主要负责bo,enum,factory,gataway等的代码管理 cola-infrast:cola应用的基础设施层模块,主要负责gatawayimpl,do,mapper等的代码管理 +9.codemaker-dberparse + 基于plantuml-er图解析数据库表实体生成sql create 语句,与dberpicture相互协作 + -- Gitee