Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Pig
提交
f7fa513e
P
Pig
项目概览
int
/
Pig
上一次同步 11 个月
通知
8
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Pig
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
f7fa513e
编写于
7月 21, 2022
作者:
pig_冷冷
提交者:
Gitee
7月 21, 2022
浏览文件
操作
浏览文件
下载
差异文件
!248
♻
重构代码生成器
Merge pull request !248 from Fxz/dev
上级
54166bc6
19476409
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
376 addition
and
271 deletion
+376
-271
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GenCodeService.java
...ava/com/pig4cloud/pig/codegen/service/GenCodeService.java
+174
-257
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenFormConfServiceImpl.java
...loud/pig/codegen/service/impl/GenFormConfServiceImpl.java
+5
-3
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
...4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
+21
-9
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/temp/AvueGenCodeServiceImpl.java
...pig/codegen/service/impl/temp/AvueGenCodeServiceImpl.java
+106
-0
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/temp/EleGenCodeServiceImpl.java
.../pig/codegen/service/impl/temp/EleGenCodeServiceImpl.java
+61
-0
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
...java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
+9
-2
未找到文件。
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/s
upport/CodeGenKits
.java
→
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/s
ervice/GenCodeService
.java
浏览文件 @
f7fa513e
/*
* Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.pig4cloud.pig.codegen.support
;
package
com.pig4cloud.pig.codegen.service
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.io.IoUtil
;
...
...
@@ -27,8 +11,6 @@ import com.pig4cloud.pig.codegen.entity.TableEntity;
import
com.pig4cloud.pig.common.core.constant.CommonConstants
;
import
com.pig4cloud.pig.common.core.exception.CheckedException
;
import
lombok.SneakyThrows
;
import
lombok.experimental.UtilityClass
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.configuration.Configuration
;
import
org.apache.commons.configuration.ConfigurationException
;
import
org.apache.commons.configuration.PropertiesConfiguration
;
...
...
@@ -41,7 +23,6 @@ import org.apache.velocity.tools.generic.DateTool;
import
org.apache.velocity.tools.generic.MathTool
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.StringWriter
;
import
java.nio.charset.StandardCharsets
;
import
java.util.*
;
...
...
@@ -49,49 +30,80 @@ import java.util.zip.ZipEntry;
import
java.util.zip.ZipOutputStream
;
/**
* 代码生成器 工具类 copy
* elunez/eladmin/blob/master/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java
* 生成代码抽象
*
* @author Zheng Jie
* @author lengleng
* @date 2020-03-13
* @author Fxz
* @date 2022/7/21 02:24
*/
@Slf4j
@UtilityClass
public
class
CodeGenKits
{
public
interface
GenCodeService
{
public
final
String
CRUD_PREFIX
=
"export const tableOption ="
;
default
Map
<
String
,
String
>
gen
(
GenConfig
genConfig
,
Map
<
String
,
String
>
table
,
List
<
Map
<
String
,
String
>>
columns
,
ZipOutputStream
zip
,
GenFormConf
formConf
)
{
// 构建表实体
TableEntity
tableEntity
=
buildTableEntity
(
genConfig
,
table
);
private
final
String
ENTITY_JAVA_VM
=
"Entity.java.vm"
;
// 处理列相关
buildColumnEntity
(
tableEntity
,
columns
);
private
final
String
MAPPER_JAVA_VM
=
"Mapper.java.vm"
;
// 模板入参
Map
<
String
,
Object
>
tempModel
=
buildTempModel
(
tableEntity
,
genConfig
);
private
final
String
SERVICE_JAVA_VM
=
"Service.java.vm"
;
private
final
String
SERVICE_IMPL_JAVA_VM
=
"ServiceImpl.java.vm"
;
private
final
String
CONTROLLER_JAVA_VM
=
"Controller.java.vm"
;
return
renderData
(
genConfig
,
zip
,
tableEntity
,
tempModel
,
formConf
);
}
private
final
String
MAPPER_XML_VM
=
"Mapper.xml.vm"
;
/**
* 渲染数据
* @param genConfig 用户输入相关
* @param zip 输出zip流
* @param tableEntity 表格实体
* @param map 参数集合
* @param formConf 表单设计
*/
@SneakyThrows
default
Map
<
String
,
String
>
renderData
(
GenConfig
genConfig
,
ZipOutputStream
zip
,
TableEntity
tableEntity
,
Map
<
String
,
Object
>
map
,
GenFormConf
formConf
)
{
// 设置velocity资源加载器
Properties
prop
=
new
Properties
();
prop
.
put
(
"file.resource.loader.class"
,
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"
);
Velocity
.
init
(
prop
);
private
final
String
MENU_SQL_VM
=
"menu.sql.vm"
;
VelocityContext
context
=
new
VelocityContext
(
map
);
// 函数库
context
.
put
(
"math"
,
new
MathTool
());
context
.
put
(
"dateTool"
,
new
DateTool
());
private
final
String
AVUE_INDEX_VUE_VM
=
"avue/index.vue.vm"
;
// 获取模板列表
List
<
String
>
templates
=
getTemplates
(
genConfig
);
Map
<
String
,
String
>
resultMap
=
new
LinkedHashMap
<>(
8
);
private
final
String
ELE_INDEX_VUE_VM
=
"element/index.vue.vm"
;
for
(
String
template
:
templates
)
{
// 渲染模板
StringWriter
sw
=
new
StringWriter
();
Template
tpl
=
Velocity
.
getTemplate
(
template
,
CharsetUtil
.
UTF_8
);
tpl
.
merge
(
context
,
sw
);
private
final
String
ELE_ADD_UPDATE_VUE_VM
=
"element/form.vue.vm"
;
// 添加到zip
String
fileName
=
getFileName
(
template
,
tableEntity
.
getCaseClassName
(),
map
.
get
(
"package"
).
toString
(),
map
.
get
(
"moduleName"
).
toString
());
private
final
String
AVUE_API_JS_VM
=
"avue/api.js.vm"
;
if
(
zip
!=
null
)
{
zip
.
putNextEntry
(
new
ZipEntry
(
Objects
.
requireNonNull
(
fileName
)));
IoUtil
.
write
(
zip
,
StandardCharsets
.
UTF_8
,
false
,
sw
.
toString
());
IoUtil
.
close
(
sw
);
zip
.
closeEntry
();
}
resultMap
.
put
(
template
,
sw
.
toString
());
}
private
final
String
AVUE_CRUD_JS_VM
=
"avue/crud.js.vm"
;
return
resultMap
;
}
/**
*
配置
* @param config
* @return
*
注入支持的模板列表
* @param config
用户输入
* @return
ListString
*/
private
List
<
String
>
getTemplates
(
GenConfig
config
)
{
default
List
<
String
>
getTemplates
(
GenConfig
config
)
{
List
<
String
>
templates
=
new
ArrayList
<>();
templates
.
add
(
"template/Entity.java.vm"
);
templates
.
add
(
"template/Mapper.java.vm"
);
...
...
@@ -100,55 +112,103 @@ public class CodeGenKits {
templates
.
add
(
"template/ServiceImpl.java.vm"
);
templates
.
add
(
"template/Controller.java.vm"
);
templates
.
add
(
"template/menu.sql.vm"
);
templates
.
add
(
"template/avue/api.js.vm"
);
return
templates
;
}
if
(
StyleTypeEnum
.
AVUE
.
getStyle
().
equals
(
config
.
getStyle
()))
{
templates
.
add
(
"template/avue/index.vue.vm"
);
templates
.
add
(
"template/avue/crud.js.vm"
);
/**
* 获取文件名
*/
default
String
getFileName
(
String
template
,
String
className
,
String
packageName
,
String
moduleName
)
{
String
packagePath
=
CommonConstants
.
BACK_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"main"
+
File
.
separator
+
"java"
+
File
.
separator
;
if
(
StringUtils
.
isNotBlank
(
packageName
))
{
packagePath
+=
packageName
.
replace
(
"."
,
File
.
separator
)
+
File
.
separator
+
moduleName
+
File
.
separator
;
}
else
{
templates
.
add
(
"template/element/index.vue.vm"
);
templates
.
add
(
"template/element/form.vue.vm"
)
;
if
(
template
.
contains
(
"Entity.java.vm"
))
{
return
packagePath
+
"entity"
+
File
.
separator
+
className
+
".java"
;
}
return
templates
;
if
(
template
.
contains
(
"Mapper.java.vm"
))
{
return
packagePath
+
"mapper"
+
File
.
separator
+
className
+
"Mapper.java"
;
}
if
(
template
.
contains
(
"Service.java.vm"
))
{
return
packagePath
+
"service"
+
File
.
separator
+
className
+
"Service.java"
;
}
if
(
template
.
contains
(
"ServiceImpl.java.vm"
))
{
return
packagePath
+
"service"
+
File
.
separator
+
"impl"
+
File
.
separator
+
className
+
"ServiceImpl.java"
;
}
if
(
template
.
contains
(
"Controller.java.vm"
))
{
return
packagePath
+
"controller"
+
File
.
separator
+
className
+
"Controller.java"
;
}
if
(
template
.
contains
(
"Mapper.xml.vm"
))
{
return
CommonConstants
.
BACK_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"main"
+
File
.
separator
+
"resources"
+
File
.
separator
+
"mapper"
+
File
.
separator
+
className
+
"Mapper.xml"
;
}
if
(
template
.
contains
(
"menu.sql.vm"
))
{
return
className
.
toLowerCase
()
+
"_menu.sql"
;
}
return
null
;
}
/**
* 生成代码
* @return
*/
@SneakyThrows
public
Map
<
String
,
String
>
generatorCode
(
GenConfig
genConfig
,
Map
<
String
,
String
>
table
,
List
<
Map
<
String
,
String
>>
columns
,
ZipOutputStream
zip
,
GenFormConf
formConf
)
{
// 配置信息
Configuration
config
=
getConfig
();
boolean
hasBigDecimal
=
false
;
// 表信息
TableEntity
tableEntity
=
new
TableEntity
();
tableEntity
.
setTableName
(
table
.
get
(
"tableName"
));
default
Map
<
String
,
Object
>
buildTempModel
(
TableEntity
tableEntity
,
GenConfig
genConfig
)
{
// 封装模板数据
Map
<
String
,
Object
>
map
=
new
HashMap
<>(
16
);
map
.
put
(
"tableName"
,
tableEntity
.
getTableName
());
map
.
put
(
"pk"
,
tableEntity
.
getPk
());
map
.
put
(
"className"
,
tableEntity
.
getCaseClassName
());
map
.
put
(
"classname"
,
tableEntity
.
getLowerClassName
());
map
.
put
(
"pathName"
,
tableEntity
.
getLowerClassName
().
toLowerCase
());
map
.
put
(
"columns"
,
tableEntity
.
getColumns
());
map
.
put
(
"datetime"
,
DateUtil
.
now
());
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getComments
()))
{
tableEntity
.
setComments
(
genConfig
.
getComments
());
map
.
put
(
"comments"
,
genConfig
.
getComments
());
}
else
{
tableEntity
.
setComments
(
table
.
get
(
"tableComment"
));
map
.
put
(
"comments"
,
tableEntity
.
getComments
(
));
}
String
tablePrefix
;
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getTablePrefix
()))
{
tablePrefix
=
genConfig
.
getTablePrefix
();
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getAuthor
()))
{
map
.
put
(
"author"
,
genConfig
.
getAuthor
());
}
else
{
tablePrefix
=
config
.
getString
(
"tablePrefix"
);
map
.
put
(
"author"
,
getConfig
().
getString
(
"author"
)
);
}
// 表名转换成Java类名
String
className
=
tableToJava
(
tableEntity
.
getTableName
(),
tablePrefix
);
tableEntity
.
setCaseClassName
(
className
);
tableEntity
.
setLowerClassName
(
StringUtils
.
uncapitalize
(
className
));
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getModuleName
()))
{
map
.
put
(
"moduleName"
,
genConfig
.
getModuleName
());
}
else
{
map
.
put
(
"moduleName"
,
getConfig
().
getString
(
"moduleName"
));
}
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getPackageName
()))
{
map
.
put
(
"package"
,
genConfig
.
getPackageName
());
map
.
put
(
"mainPath"
,
genConfig
.
getPackageName
());
}
else
{
map
.
put
(
"package"
,
getConfig
().
getString
(
"package"
));
map
.
put
(
"mainPath"
,
getConfig
().
getString
(
"mainPath"
));
}
return
map
;
}
/**
* 构建 ColumnEntity
* @param columns 列元信息
*/
default
void
buildColumnEntity
(
TableEntity
tableEntity
,
List
<
Map
<
String
,
String
>>
columns
)
{
// 获取需要在swagger文档中隐藏的属性字段
List
<
Object
>
hiddenColumns
=
config
.
getList
(
"hiddenColumn"
);
List
<
Object
>
hiddenColumns
=
getConfig
()
.
getList
(
"hiddenColumn"
);
// 列信息
List
<
ColumnEntity
>
columnList
=
new
ArrayList
<>();
for
(
Map
<
String
,
String
>
column
:
columns
)
{
...
...
@@ -181,11 +241,9 @@ public class CodeGenKits {
// 列的数据类型,转换成Java类型
String
dataType
=
StrUtil
.
subBefore
(
columnEntity
.
getDataType
(),
"("
,
false
);
String
attrType
=
config
.
getString
(
dataType
,
"unknowType"
);
String
attrType
=
getConfig
()
.
getString
(
dataType
,
"unknowType"
);
columnEntity
.
setAttrType
(
attrType
);
if
(!
hasBigDecimal
&&
"BigDecimal"
.
equals
(
attrType
))
{
hasBigDecimal
=
true
;
}
// 是否主键
if
(
"PRI"
.
equalsIgnoreCase
(
column
.
get
(
"columnKey"
))
&&
tableEntity
.
getPk
()
==
null
)
{
tableEntity
.
setPk
(
columnEntity
);
...
...
@@ -199,128 +257,57 @@ public class CodeGenKits {
if
(
tableEntity
.
getPk
()
==
null
)
{
tableEntity
.
setPk
(
tableEntity
.
getColumns
().
get
(
0
));
}
}
// 封装模板数据
Map
<
String
,
Object
>
map
=
new
HashMap
<>(
16
);
map
.
put
(
"tableName"
,
tableEntity
.
getTableName
());
map
.
put
(
"pk"
,
tableEntity
.
getPk
());
map
.
put
(
"className"
,
tableEntity
.
getCaseClassName
());
map
.
put
(
"classname"
,
tableEntity
.
getLowerClassName
());
map
.
put
(
"pathName"
,
tableEntity
.
getLowerClassName
().
toLowerCase
());
map
.
put
(
"columns"
,
tableEntity
.
getColumns
());
map
.
put
(
"hasBigDecimal"
,
hasBigDecimal
);
map
.
put
(
"datetime"
,
DateUtil
.
now
(
));
/**
* 构建 TableEntity
* @param genConfig 用户输入相关
* @param table 表元信息
* @return TableEntity
*/
default
TableEntity
buildTableEntity
(
GenConfig
genConfig
,
Map
<
String
,
String
>
table
)
{
// 表信息
TableEntity
tableEntity
=
new
TableEntity
(
);
tableEntity
.
setTableName
(
table
.
get
(
"tableName"
));
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getComments
()))
{
map
.
put
(
"comments"
,
genConfig
.
getComments
());
}
else
{
map
.
put
(
"comments"
,
tableEntity
.
getComments
());
}
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getAuthor
()))
{
map
.
put
(
"author"
,
genConfig
.
getAuthor
());
}
else
{
map
.
put
(
"author"
,
config
.
getString
(
"author"
));
}
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getModuleName
()))
{
map
.
put
(
"moduleName"
,
genConfig
.
getModuleName
());
tableEntity
.
setComments
(
genConfig
.
getComments
());
}
else
{
map
.
put
(
"moduleName"
,
config
.
getString
(
"moduleName
"
));
tableEntity
.
setComments
(
table
.
get
(
"tableComment
"
));
}
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getPackageName
()))
{
map
.
put
(
"package"
,
genConfig
.
getPackageName
());
map
.
put
(
"mainPath"
,
genConfig
.
getPackageName
()
);
String
tablePrefix
;
if
(
StrUtil
.
isNotBlank
(
genConfig
.
getTablePrefix
()))
{
tablePrefix
=
genConfig
.
getTablePrefix
(
);
}
else
{
map
.
put
(
"package"
,
config
.
getString
(
"package"
));
map
.
put
(
"mainPath"
,
config
.
getString
(
"mainPath"
));
tablePrefix
=
getConfig
().
getString
(
"tablePrefix"
);
}
// 表名转换成Java类名
String
className
=
tableToJava
(
tableEntity
.
getTableName
(),
tablePrefix
);
tableEntity
.
setCaseClassName
(
className
);
tableEntity
.
setLowerClassName
(
StringUtils
.
uncapitalize
(
className
));
// 渲染数据
return
renderData
(
genConfig
,
zip
,
formConf
,
tableEntity
,
map
);
return
tableEntity
;
}
/**
* 渲染数据
* @param genConfig 配置信息
* @param zip 流 (为空,直接返回Map)
* @param formConf 表单信息
* @param tableEntity 表基本信息
* @param map 模板参数
* @return map key-filename value-contents
* @throws IOException
* 获取配置信息
*/
private
Map
<
String
,
String
>
renderData
(
GenConfig
genConfig
,
ZipOutputStream
zip
,
GenFormConf
formConf
,
TableEntity
tableEntity
,
Map
<
String
,
Object
>
map
)
throws
IOException
{
// 设置velocity资源加载器
Properties
prop
=
new
Properties
();
prop
.
put
(
"file.resource.loader.class"
,
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"
);
Velocity
.
init
(
prop
);
VelocityContext
context
=
new
VelocityContext
(
map
);
// 函数库
context
.
put
(
"math"
,
new
MathTool
());
context
.
put
(
"dateTool"
,
new
DateTool
());
// 获取模板列表
List
<
String
>
templates
=
getTemplates
(
genConfig
);
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>(
8
);
for
(
String
template
:
templates
)
{
// 如果是crud
if
(
template
.
contains
(
AVUE_CRUD_JS_VM
)
&&
formConf
!=
null
)
{
String
fileName
=
getFileName
(
template
,
tableEntity
.
getCaseClassName
(),
map
.
get
(
"package"
).
toString
(),
map
.
get
(
"moduleName"
).
toString
());
String
contents
=
CRUD_PREFIX
+
formConf
.
getFormInfo
();
if
(
zip
!=
null
)
{
zip
.
putNextEntry
(
new
ZipEntry
(
Objects
.
requireNonNull
(
fileName
)));
IoUtil
.
write
(
zip
,
StandardCharsets
.
UTF_8
,
false
,
contents
);
zip
.
closeEntry
();
}
resultMap
.
put
(
template
,
contents
);
continue
;
}
// 渲染模板
StringWriter
sw
=
new
StringWriter
();
Template
tpl
=
Velocity
.
getTemplate
(
template
,
CharsetUtil
.
UTF_8
);
tpl
.
merge
(
context
,
sw
);
// 添加到zip
String
fileName
=
getFileName
(
template
,
tableEntity
.
getCaseClassName
(),
map
.
get
(
"package"
).
toString
(),
map
.
get
(
"moduleName"
).
toString
());
if
(
zip
!=
null
)
{
zip
.
putNextEntry
(
new
ZipEntry
(
Objects
.
requireNonNull
(
fileName
)));
IoUtil
.
write
(
zip
,
StandardCharsets
.
UTF_8
,
false
,
sw
.
toString
());
IoUtil
.
close
(
sw
);
zip
.
closeEntry
();
}
resultMap
.
put
(
template
,
sw
.
toString
());
default
Configuration
getConfig
()
{
try
{
return
new
PropertiesConfiguration
(
"generator.properties"
);
}
catch
(
ConfigurationException
e
)
{
throw
new
CheckedException
(
"获取配置文件失败,"
,
e
);
}
return
resultMap
;
}
/**
* 列名转换成Java属性名
*/
public
String
columnToJava
(
String
columnName
)
{
return
WordUtils
.
capitalizeFully
(
columnName
,
new
char
[]
{
'_'
}).
replace
(
"_"
,
""
);
}
/**
* 表名转换成Java类名
*/
private
String
tableToJava
(
String
tableName
,
String
tablePrefix
)
{
default
String
tableToJava
(
String
tableName
,
String
tablePrefix
)
{
if
(
StringUtils
.
isNotBlank
(
tablePrefix
))
{
tableName
=
tableName
.
replaceFirst
(
tablePrefix
,
""
);
}
...
...
@@ -328,80 +315,10 @@ public class CodeGenKits {
}
/**
* 获取配置信息
*/
public
Configuration
getConfig
()
{
try
{
return
new
PropertiesConfiguration
(
"generator.properties"
);
}
catch
(
ConfigurationException
e
)
{
throw
new
CheckedException
(
"获取配置文件失败,"
,
e
);
}
}
/**
* 获取文件名
* 列名转换成Java属性名
*/
private
String
getFileName
(
String
template
,
String
className
,
String
packageName
,
String
moduleName
)
{
String
packagePath
=
CommonConstants
.
BACK_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"main"
+
File
.
separator
+
"java"
+
File
.
separator
;
if
(
StringUtils
.
isNotBlank
(
packageName
))
{
packagePath
+=
packageName
.
replace
(
"."
,
File
.
separator
)
+
File
.
separator
+
moduleName
+
File
.
separator
;
}
if
(
template
.
contains
(
ENTITY_JAVA_VM
))
{
return
packagePath
+
"entity"
+
File
.
separator
+
className
+
".java"
;
}
if
(
template
.
contains
(
MAPPER_JAVA_VM
))
{
return
packagePath
+
"mapper"
+
File
.
separator
+
className
+
"Mapper.java"
;
}
if
(
template
.
contains
(
SERVICE_JAVA_VM
))
{
return
packagePath
+
"service"
+
File
.
separator
+
className
+
"Service.java"
;
}
if
(
template
.
contains
(
SERVICE_IMPL_JAVA_VM
))
{
return
packagePath
+
"service"
+
File
.
separator
+
"impl"
+
File
.
separator
+
className
+
"ServiceImpl.java"
;
}
if
(
template
.
contains
(
CONTROLLER_JAVA_VM
))
{
return
packagePath
+
"controller"
+
File
.
separator
+
className
+
"Controller.java"
;
}
if
(
template
.
contains
(
MAPPER_XML_VM
))
{
return
CommonConstants
.
BACK_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"main"
+
File
.
separator
+
"resources"
+
File
.
separator
+
"mapper"
+
File
.
separator
+
className
+
"Mapper.xml"
;
}
if
(
template
.
contains
(
MENU_SQL_VM
))
{
return
className
.
toLowerCase
()
+
"_menu.sql"
;
}
if
(
template
.
contains
(
AVUE_INDEX_VUE_VM
)
||
template
.
contains
(
ELE_INDEX_VUE_VM
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"views"
+
File
.
separator
+
moduleName
+
File
.
separator
+
className
.
toLowerCase
()
+
File
.
separator
+
"index.vue"
;
}
if
(
template
.
contains
(
AVUE_API_JS_VM
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"api"
+
File
.
separator
+
className
.
toLowerCase
()
+
".js"
;
}
if
(
template
.
contains
(
AVUE_CRUD_JS_VM
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"const"
+
File
.
separator
+
"crud"
+
File
.
separator
+
className
.
toLowerCase
()
+
".js"
;
}
if
(
template
.
contains
(
ELE_ADD_UPDATE_VUE_VM
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"views"
+
File
.
separator
+
moduleName
+
File
.
separator
+
className
.
toLowerCase
()
+
File
.
separator
+
className
.
toLowerCase
()
+
"-form.vue"
;
}
return
null
;
default
String
columnToJava
(
String
columnName
)
{
return
WordUtils
.
capitalizeFully
(
columnName
,
new
char
[]
{
'_'
}).
replace
(
"_"
,
""
);
}
}
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenFormConfServiceImpl.java
浏览文件 @
f7fa513e
...
...
@@ -23,8 +23,8 @@ import com.pig4cloud.pig.codegen.entity.ColumnEntity;
import
com.pig4cloud.pig.codegen.entity.GenFormConf
;
import
com.pig4cloud.pig.codegen.mapper.GenFormConfMapper
;
import
com.pig4cloud.pig.codegen.mapper.GeneratorMapper
;
import
com.pig4cloud.pig.codegen.service.GenCodeService
;
import
com.pig4cloud.pig.codegen.service.GenFormConfService
;
import
com.pig4cloud.pig.codegen.support.CodeGenKits
;
import
lombok.RequiredArgsConstructor
;
import
lombok.SneakyThrows
;
import
org.apache.commons.lang.StringUtils
;
...
...
@@ -52,6 +52,8 @@ public class GenFormConfServiceImpl extends ServiceImpl<GenFormConfMapper, GenFo
private
final
GeneratorMapper
generatorMapper
;
private
final
GenCodeService
avue
;
/**
* 1. 根据数据源、表名称,查询已配置表单信息 2. 不存在调用模板生成
* @param dsName 数据源ID
...
...
@@ -80,13 +82,13 @@ public class GenFormConfServiceImpl extends ServiceImpl<GenFormConfMapper, GenFo
for
(
Map
<
String
,
String
>
column
:
columns
)
{
ColumnEntity
columnEntity
=
new
ColumnEntity
();
columnEntity
.
setComments
(
column
.
get
(
"columnComment"
));
columnEntity
.
setLowerAttrName
(
StringUtils
.
uncapitalize
(
CodeGenKits
.
columnToJava
(
column
.
get
(
"columnName"
))));
columnEntity
.
setLowerAttrName
(
StringUtils
.
uncapitalize
(
avue
.
columnToJava
(
column
.
get
(
"columnName"
))));
columnList
.
add
(
columnEntity
);
}
context
.
put
(
"columns"
,
columnList
);
StringWriter
writer
=
new
StringWriter
();
template
.
merge
(
context
,
writer
);
return
StrUtil
.
trim
(
StrUtil
.
removePrefix
(
writer
.
toString
(),
CodeGenKits
.
CRUD_PREFIX
));
return
StrUtil
.
trim
(
StrUtil
.
removePrefix
(
writer
.
toString
(),
"export const tableOption ="
));
}
}
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
浏览文件 @
f7fa513e
...
...
@@ -28,8 +28,9 @@ import com.pig4cloud.pig.codegen.entity.GenConfig;
import
com.pig4cloud.pig.codegen.entity.GenFormConf
;
import
com.pig4cloud.pig.codegen.mapper.GenFormConfMapper
;
import
com.pig4cloud.pig.codegen.mapper.GeneratorMapper
;
import
com.pig4cloud.pig.codegen.service.GenCodeService
;
import
com.pig4cloud.pig.codegen.service.GeneratorService
;
import
com.pig4cloud.pig.codegen.support.
CodeGenKits
;
import
com.pig4cloud.pig.codegen.support.
StyleTypeEnum
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Service
;
...
...
@@ -52,6 +53,8 @@ public class GeneratorServiceImpl implements GeneratorService {
private
final
GenFormConfMapper
genFormConfMapper
;
private
final
Map
<
String
,
GenCodeService
>
genCodeServiceMap
;
/**
* 分页查询表
* @param tableName 查询条件
...
...
@@ -77,17 +80,22 @@ public class GeneratorServiceImpl implements GeneratorService {
.
eq
(
GenFormConf:
:
getTableName
,
genConfig
.
getTableName
()).
orderByDesc
(
GenFormConf:
:
getCreateTime
));
String
tableNames
=
genConfig
.
getTableName
();
String
dsName
=
genConfig
.
getDsName
();
// 获取实现
GenCodeService
genCodeService
=
genCodeServiceMap
.
get
(
StyleTypeEnum
.
getDecs
(
genConfig
.
getStyle
()));
for
(
String
tableName
:
StrUtil
.
split
(
tableNames
,
StrUtil
.
DASHED
))
{
// 查询表信息
Map
<
String
,
String
>
table
=
generatorMapper
.
queryTable
(
tableName
,
genConfig
.
getDsName
()
);
Map
<
String
,
String
>
table
=
generatorMapper
.
queryTable
(
tableName
,
dsName
);
// 查询列信息
List
<
Map
<
String
,
String
>>
columns
=
generatorMapper
.
queryColumns
(
tableName
,
genConfig
.
getDsName
()
);
List
<
Map
<
String
,
String
>>
columns
=
generatorMapper
.
queryColumns
(
tableName
,
dsName
);
// 生成代码
if
(
CollUtil
.
isNotEmpty
(
formConfList
))
{
return
CodeGenKits
.
generatorCode
(
genConfig
,
table
,
columns
,
null
,
formConfList
.
get
(
0
));
return
genCodeService
.
gen
(
genConfig
,
table
,
columns
,
null
,
formConfList
.
get
(
0
));
}
else
{
return
CodeGenKits
.
generatorCode
(
genConfig
,
table
,
columns
,
null
,
null
);
return
genCodeService
.
gen
(
genConfig
,
table
,
columns
,
null
,
null
);
}
}
...
...
@@ -109,17 +117,21 @@ public class GeneratorServiceImpl implements GeneratorService {
ZipOutputStream
zip
=
new
ZipOutputStream
(
outputStream
);
String
tableNames
=
genConfig
.
getTableName
();
String
dsName
=
genConfig
.
getDsName
();
GenCodeService
genCodeService
=
genCodeServiceMap
.
get
(
StyleTypeEnum
.
getDecs
(
genConfig
.
getStyle
()));
for
(
String
tableName
:
StrUtil
.
split
(
tableNames
,
StrUtil
.
DASHED
))
{
// 查询表信息
Map
<
String
,
String
>
table
=
generatorMapper
.
queryTable
(
tableName
,
genConfig
.
getDsName
()
);
Map
<
String
,
String
>
table
=
generatorMapper
.
queryTable
(
tableName
,
dsName
);
// 查询列信息
List
<
Map
<
String
,
String
>>
columns
=
generatorMapper
.
queryColumns
(
tableName
,
genConfig
.
getDsName
()
);
List
<
Map
<
String
,
String
>>
columns
=
generatorMapper
.
queryColumns
(
tableName
,
dsName
);
// 生成代码
if
(
CollUtil
.
isNotEmpty
(
formConfList
))
{
CodeGenKits
.
generatorCode
(
genConfig
,
table
,
columns
,
zip
,
formConfList
.
get
(
0
));
genCodeService
.
gen
(
genConfig
,
table
,
columns
,
zip
,
formConfList
.
get
(
0
));
}
else
{
CodeGenKits
.
generatorCode
(
genConfig
,
table
,
columns
,
zip
,
null
);
genCodeService
.
gen
(
genConfig
,
table
,
columns
,
zip
,
null
);
}
}
IoUtil
.
close
(
zip
);
...
...
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/temp/AvueGenCodeServiceImpl.java
0 → 100644
浏览文件 @
f7fa513e
package
com.pig4cloud.pig.codegen.service.impl.temp
;
import
cn.hutool.core.io.IoUtil
;
import
com.pig4cloud.pig.codegen.entity.GenConfig
;
import
com.pig4cloud.pig.codegen.entity.GenFormConf
;
import
com.pig4cloud.pig.codegen.entity.TableEntity
;
import
com.pig4cloud.pig.codegen.service.GenCodeService
;
import
com.pig4cloud.pig.common.core.constant.CommonConstants
;
import
lombok.SneakyThrows
;
import
org.springframework.stereotype.Service
;
import
java.io.File
;
import
java.nio.charset.StandardCharsets
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipOutputStream
;
/**
* @author Fxz
* @date 2022/7/21 02:45
*/
@Service
(
"avue"
)
public
class
AvueGenCodeServiceImpl
implements
GenCodeService
{
public
final
String
CRUD_PREFIX
=
"export const tableOption ="
;
/**
* 注入支持的模板列表
* @param config 用户输入
* @return ListString
*/
@Override
public
List
<
String
>
getTemplates
(
GenConfig
config
)
{
List
<
String
>
templates
=
GenCodeService
.
super
.
getTemplates
(
config
);
templates
.
add
(
"template/avue/index.vue.vm"
);
templates
.
add
(
"template/avue/crud.js.vm"
);
templates
.
add
(
"template/avue/api.js.vm"
);
return
templates
;
}
/**
* 获取文件名
* @param template
* @param className
* @param packageName
* @param moduleName
*/
@Override
public
String
getFileName
(
String
template
,
String
className
,
String
packageName
,
String
moduleName
)
{
if
(
template
.
contains
(
"avue/index.vue.vm"
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"views"
+
File
.
separator
+
moduleName
+
File
.
separator
+
className
.
toLowerCase
()
+
File
.
separator
+
"index.vue"
;
}
if
(
template
.
contains
(
"avue/api.js.vm"
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"api"
+
File
.
separator
+
className
.
toLowerCase
()
+
".js"
;
}
if
(
template
.
contains
(
"avue/crud.js.vm"
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"const"
+
File
.
separator
+
"crud"
+
File
.
separator
+
className
.
toLowerCase
()
+
".js"
;
}
return
GenCodeService
.
super
.
getFileName
(
template
,
className
,
packageName
,
moduleName
);
}
/**
* 渲染数据
* @param genConfig 用户输入相关
* @param zip 输出zip流
* @param tableEntity 表格实体
* @param map 参数集合
* @param formConf 表单设计
* @return
*/
@SneakyThrows
public
Map
<
String
,
String
>
renderData
(
GenConfig
genConfig
,
ZipOutputStream
zip
,
TableEntity
tableEntity
,
Map
<
String
,
Object
>
map
,
GenFormConf
formConf
)
{
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>();
if
(
Objects
.
nonNull
(
formConf
))
{
// 存在 curd 存在设计好的JSON 则使用Json 覆盖
String
crudTempName
=
"template/avue/crud.js.vm"
;
String
fileName
=
getFileName
(
crudTempName
,
tableEntity
.
getCaseClassName
(),
map
.
get
(
"package"
).
toString
(),
map
.
get
(
"moduleName"
).
toString
());
String
contents
=
CRUD_PREFIX
+
formConf
.
getFormInfo
();
if
(
zip
!=
null
)
{
zip
.
putNextEntry
(
new
ZipEntry
(
Objects
.
requireNonNull
(
fileName
)));
IoUtil
.
write
(
zip
,
StandardCharsets
.
UTF_8
,
false
,
contents
);
zip
.
closeEntry
();
}
resultMap
.
putAll
(
GenCodeService
.
super
.
renderData
(
genConfig
,
zip
,
tableEntity
,
map
,
formConf
));
resultMap
.
put
(
crudTempName
,
contents
);
return
resultMap
;
}
return
GenCodeService
.
super
.
renderData
(
genConfig
,
zip
,
tableEntity
,
map
,
formConf
);
}
}
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/temp/EleGenCodeServiceImpl.java
0 → 100644
浏览文件 @
f7fa513e
package
com.pig4cloud.pig.codegen.service.impl.temp
;
import
com.pig4cloud.pig.codegen.entity.GenConfig
;
import
com.pig4cloud.pig.codegen.service.GenCodeService
;
import
com.pig4cloud.pig.common.core.constant.CommonConstants
;
import
org.springframework.stereotype.Service
;
import
java.io.File
;
import
java.util.List
;
/**
* @author Fxz
* @date 2022/7/21 02:46
*/
@Service
(
"element"
)
public
class
EleGenCodeServiceImpl
implements
GenCodeService
{
/**
* 注入支持的模板列表
* @param config 用户输入
* @return ListString
*/
@Override
public
List
<
String
>
getTemplates
(
GenConfig
config
)
{
List
<
String
>
templates
=
GenCodeService
.
super
.
getTemplates
(
config
);
templates
.
add
(
"template/element/index.vue.vm"
);
templates
.
add
(
"template/element/form.vue.vm"
);
templates
.
add
(
"template/avue/api.js.vm"
);
return
templates
;
}
/**
* 获取文件名
* @param template
* @param className
* @param packageName
* @param moduleName
*/
@Override
public
String
getFileName
(
String
template
,
String
className
,
String
packageName
,
String
moduleName
)
{
if
(
template
.
contains
(
"element/index.vue.vm"
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"views"
+
File
.
separator
+
moduleName
+
File
.
separator
+
className
.
toLowerCase
()
+
File
.
separator
+
"index.vue"
;
}
if
(
template
.
contains
(
"element/form.vue.vm"
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"views"
+
File
.
separator
+
moduleName
+
File
.
separator
+
className
.
toLowerCase
()
+
File
.
separator
+
className
.
toLowerCase
()
+
"-form.vue"
;
}
if
(
template
.
contains
(
"avue/api.js.vm"
))
{
return
CommonConstants
.
FRONT_END_PROJECT
+
File
.
separator
+
"src"
+
File
.
separator
+
"api"
+
File
.
separator
+
className
.
toLowerCase
()
+
".js"
;
}
return
GenCodeService
.
super
.
getFileName
(
template
,
className
,
packageName
,
moduleName
);
}
}
pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/support/StyleTypeEnum.java
浏览文件 @
f7fa513e
...
...
@@ -3,6 +3,8 @@ package com.pig4cloud.pig.codegen.support;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
import
java.util.Arrays
;
/**
* @author lengleng
* @date 2021/7/31
...
...
@@ -16,12 +18,12 @@ public enum StyleTypeEnum {
/**
* 前端类型-avue 风格
*/
AVUE
(
"0"
,
"avue
风格
"
),
AVUE
(
"0"
,
"avue"
),
/**
* 前端类型-element 风格
*/
ELEMENT
(
"1"
,
"element
风格
"
);
ELEMENT
(
"1"
,
"element"
);
/**
* 类型
...
...
@@ -33,4 +35,9 @@ public enum StyleTypeEnum {
*/
private
String
description
;
public
static
String
getDecs
(
String
style
)
{
return
Arrays
.
stream
(
StyleTypeEnum
.
values
()).
filter
(
styleTypeEnum
->
styleTypeEnum
.
getStyle
().
equals
(
style
))
.
findFirst
().
orElse
(
ELEMENT
).
getDescription
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录