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