This commit is contained in:
clay
2024-03-06 17:44:09 +08:00
commit adaec0eadd
1493 changed files with 219939 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
# Spring
spring:
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 10.7.127.189:38848
namespace: clay
dubbo:
registry:
parameters:
namespace: dubbo-clay

View File

@@ -0,0 +1,7 @@
# Spring
spring:
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: nacos.fateverse.svc.cluster.local:8848

View File

@@ -0,0 +1,42 @@
# Tomcat
server:
port: 15078
# Spring
spring:
application:
# 应用名称
name: code-gen
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 192.168.101.108:8848
username: nacos
password: nacos
namespace: ${spring.profiles.active}
config:
# 配置中心地址
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: ${spring.profiles.active}
shared-configs:
- data-id: application-${spring.profiles.active}.yaml
refresh: true
dubbo:
application:
name: dubbo-${spring.application.name}
protocol:
name: dubbo
port: -1
registry:
address: nacos://${spring.cloud.nacos.discovery.server-addr}
username: ${spring.cloud.nacos.discovery.username}
password: ${spring.cloud.nacos.discovery.password}
parameters:
namespace: dubbo-${spring.profiles.active}

View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.fateverse.code.mapper.DataSourceMapper">
<sql id="DataSource">
select ds_id,
ds_name,
username,
password,
host,
port,
type,
args,
params,
db_name,
jdbc_url,
conf_type,
remark,
create_by,
create_time,
update_by,
update_time
from gen_data_source
</sql>
<select id="selectList" resultType="cn.fateverse.code.entity.CodeDataSource">
<include refid="DataSource"/>
<where>
<if test="dsName != null and dsName != ''">and ds_name like concat('%',#{dsName},'%')</if>
</where>
</select>
<select id="selectById" resultType="cn.fateverse.code.entity.CodeDataSource">
<include refid="DataSource"/>
where ds_id = #{dsId}
</select>
<insert id="insert">
insert into gen_data_source
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="dsName != null and dsName != ''">ds_name,</if>
<if test="username != null and username != ''">username,</if>
<if test="password != null and password != ''">`password`,</if>
<if test="host != null and host != ''">`host`,</if>
<if test="port != null and port != ''">`port`,</if>
<if test="type != null ">type,</if>
<if test="args != null and args != ''">args,</if>
<if test="params != null and params != ''">params,</if>
<if test="dbName != null and dbName != ''">db_name,</if>
<if test="jdbcUrl != null and jdbcUrl != ''">jdbc_url,</if>
<if test="confType != null and confType != ''">conf_type,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="dsName != null and dsName != ''">#{dsName},</if>
<if test="username != null and username != ''">#{username},</if>
<if test="password != null and password != ''">#{password},</if>
<if test="host != null and host != ''">#{host},</if>
<if test="port != null and port != ''">#{port},</if>
<if test="type != null ">#{type},</if>
<if test="args != null and args != ''">#{args},</if>
<if test="params != null and params != ''">#{params},</if>
<if test="dbName != null and dbName != ''">#{dbName},</if>
<if test="jdbcUrl != null and jdbcUrl != ''">#{jdbcUrl},</if>
<if test="confType != null and confType != ''">#{confType},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
<update id="update">
update gen_data_source
<set>
<if test="dsName != null and dsName != ''">ds_name = #{dsName},</if>
<if test="username != null and username != ''">username = #{username},</if>
<if test="password != null and password != ''">`password` = #{password},</if>
<if test="host != null and host != ''">`host` = #{host},</if>
<if test="port != null and port != ''">`port`=#{port},</if>
<if test="type != null ">type=#{type},</if>
<if test="args != null and args != ''">args=#{args},</if>
<if test="params != null and params != ''">params=#{params},</if>
<if test="dbName != null and dbName != ''">db_name=#{dbName},</if>
<if test="jdbcUrl != null and jdbcUrl != ''">jdbc_url = #{jdbcUrl},</if>
<if test="confType != null and confType != ''">conf_type= #{confType},</if>
<if test="updateBy != null and updateBy != ''">update_by=#{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</set>
where ds_id = #{dsId}
</update>
<delete id="delete">
delete
from gen_data_source
where ds_id = #{id}
</delete>
</mapper>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.fateverse.code.mapper.RegularMapper">
<resultMap id="RegulaResult" type="cn.fateverse.code.entity.Regular">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="regular" property="regular"/>
<result column="validation" property="validation"/>
<result column="enable" property="enable"/>
<result column="create_by" property="createBy"/>
<result column="create_time" property="createTime"/>
<result column="update_by" property="updateBy"/>
<result column="update_time" property="updateTime"/>
</resultMap>
<sql id="selectRegulaVo">
select id, name, regular, validation, enable, create_by, create_time, update_by, update_time from gen_regular
</sql>
<select id="selectList" resultMap="RegulaResult">
<include refid="selectRegulaVo"/>
<where>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="regular != null and regular != ''"> and regular like concat('%', #{regular}, '%')</if>
<if test="enable != null "> and enable = #{enable}</if>
</where>
</select>
<select id="selectById" resultMap="RegulaResult">
<include refid="selectRegulaVo"/>
where id = #{id}
</select>
<insert id="insert" >
insert into gen_regular
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null">name,</if>
<if test="regular != null">regular,</if>
<if test="validation != null">validation,</if>
<if test="enable != null">enable,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null ">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if>
<if test="regular != null">#{regular},</if>
<if test="validation != null">#{validation},</if>
<if test="enable != null">#{enable},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null ">#{createTime},</if>
</trim>
</insert>
<update id="update">
update gen_regular
<set>
<if test="name != null">name = #{name},</if>
<if test="regular != null">regular = #{regular},</if>
<if test="validation != null">validation = #{validation},</if>
<if test="enable != null">enable = #{enable},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="updateTime != null ">update_time = #{updateTime},</if>
</set>
where id = #{id}
</update>
<delete id="deleteById">
delete from gen_regular
where id = #{id}
</delete>
<delete id="deleteBatchByIdList" parameterType="Long">
delete from gen_regular
where id in
<foreach collection="list" open="(" close=")" separator="," item="id">
#{id}
</foreach>
</delete>
</mapper>

View File

@@ -0,0 +1,317 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.fateverse.code.mapper.TableColumnMapper">
<select id="selectListByTableId" resultType="cn.fateverse.code.entity.TableColumn">
select column_id,
table_id,
column_name,
column_comment,
column_type,
column_length,
column_scale,
java_type,
java_field,
is_pk,
is_increment,
is_required,
is_insert,
is_edit,
is_list,
is_query,
is_regular,
query_type,
html_type,
dict_type,
sort,
create_by,
create_time,
update_by,
update_time from gen_table_column where table_id = #{tableId}
</select>
<insert id="insert">
insert into gen_table_column
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="tableId != null and tableId != ''">table_id,</if>
<if test="columnName != null and columnName != ''">column_name,</if>
<if test="columnComment != null and columnComment != ''">column_comment,</if>
<if test="columnType != null and columnType != ''">column_type,</if>
<if test="columnLength != null and columnLength != 0">column_length,</if>
<if test="columnScale != null and columnScale != 0">column_scale,</if>
<if test="javaType != null and javaType != ''">java_type,</if>
<if test="javaField != null and javaField != ''">java_field,</if>
<if test="isPk != null and isPk != ''">is_pk,</if>
<if test="isIncrement != null and isIncrement != ''">is_increment,</if>
<if test="isRequired != null and isRequired != ''">is_required,</if>
<if test="isRegular != null and isRegular != ''">is_regular,</if>
<if test="isInsert != null and isInsert != ''">is_insert,</if>
<if test="isEdit != null and isEdit != ''">is_edit,</if>
<if test="isList != null and isList != ''">is_list,</if>
<if test="isQuery != null and isQuery != ''">is_query,</if>
<if test="queryType != null and queryType != ''">query_type,</if>
<if test="htmlType != null and htmlType != ''">html_type,</if>
<if test="dictType != null">dict_type,</if>
<if test="sort != null">sort,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="tableId != null and tableId != ''">#{tableId},</if>
<if test="columnName != null and columnName != ''">#{columnName},</if>
<if test="columnComment != null and columnComment != ''">#{columnComment},</if>
<if test="columnType != null and columnType != ''">#{columnType},</if>
<if test="columnLength != null and columnLength != 0">#{columnLength},</if>
<if test="columnScale != null and columnScale != 0">#{columnScale},</if>
<if test="javaType != null and javaType != ''">#{javaType},</if>
<if test="javaField != null and javaField != ''">#{javaField},</if>
<if test="isPk != null and isPk != ''">#{isPk},</if>
<if test="isIncrement != null and isIncrement != ''">#{isIncrement},</if>
<if test="isRequired != null and isRequired != ''">#{isRequired},</if>
<if test="isRegular != null and isRegular != ''">#{isRegular},</if>
<if test="isInsert != null and isInsert != ''">#{isInsert},</if>
<if test="isEdit != null and isEdit != ''">#{isEdit},</if>
<if test="isList != null and isList != ''">#{isList},</if>
<if test="isQuery != null and isQuery != ''">#{isQuery},</if>
<if test="queryType != null and queryType != ''">#{queryType},</if>
<if test="htmlType != null and htmlType != ''">#{htmlType},</if>
<if test="dictType != null">#{dictType},</if>
<if test="sort != null">#{sort},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
<insert id="batchInsert">
insert into gen_table_column (
table_id,
column_name,
column_comment,
column_type,
column_length,
column_scale,
java_type,
java_field,
is_pk,
is_increment,
is_required,
is_insert,
is_edit,
is_list,
is_query,
is_regular,
query_type,
html_type,
dict_type,
sort,
create_by,
create_time) values
<foreach collection="list" separator="," item="column">
(#{column.tableId},
#{column.columnName},
#{column.columnComment},
#{column.columnType},
#{column.columnLength},
#{column.columnScale},
#{column.javaType},
#{column.javaField},
#{column.isPk},
#{column.isIncrement},
#{column.isRequired},
#{column.isInsert},
#{column.isEdit},
#{column.isList},
#{column.isQuery},
#{column.isRegular},
#{column.queryType},
#{column.htmlType},
#{column.dictType},
#{column.sort},
#{column.createBy},
#{column.createTime})
</foreach>
</insert>
<update id="update">
update gen_table_column
<set>
<if test="tableId != null and tableId != ''">table_id = #{tableId},</if>
<if test="columnName != null and columnName != ''">`column_name` = #{columnName},</if>
<if test="columnComment != null and columnComment != ''">column_comment=#{columnComment},</if>
<if test="columnType != null and columnType != ''">column_type=#{columnType},</if>
<if test="columnLength != null and columnLength != ''">column_length=#{columnLength},</if>
<if test="columnScale != null and columnScale != ''">column_scale=#{columnScale},</if>
<if test="javaType != null and javaType != ''">java_type=#{javaType},</if>
<if test="javaField != null and javaField != ''">java_field=#{javaField},</if>
<if test="isPk != null and isPk != ''">is_pk=#{isPk},</if>
<if test="isIncrement != null and isIncrement != ''">is_increment=#{isIncrement},</if>
<if test="isRequired != null and isRequired != ''">is_required=#{isRequired},</if>
<if test="isRegular != null and isRegular != ''">is_regular=#{isRegular},</if>
<if test="isInsert != null and isInsert != ''">is_insert=#{isInsert},</if>
<if test="isEdit != null and isEdit != ''">is_edit=#{isEdit},</if>
<if test="isList != null and isList != ''">is_list=#{isList},</if>
<if test="isQuery != null and isQuery != ''">is_query=#{isQuery},</if>
<if test="queryType != null and queryType != ''">query_type=#{queryType},</if>
<if test="htmlType != null and htmlType != ''">html_type=#{htmlType},</if>
<if test="dictType != null">dict_type=#{dictType},</if>
<if test="sort != null">sort=#{sort},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</set>
where column_id = #{columnId}
</update>
<update id="batchUpdate">
update gen_table_column
<set>
<trim prefix="column_comment = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.columnComment != null">
when column_id = #{item.columnId} then #{item.columnComment}
</if>
</foreach>
</trim>
<trim prefix="column_type = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.columnType != null">
when column_id = #{item.columnId} then #{item.columnType}
</if>
</foreach>
</trim>
<trim prefix="java_type = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.javaType != null">
when column_id = #{item.columnId} then #{item.javaType}
</if>
</foreach>
</trim>
<trim prefix="java_field = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.javaField != null">
when column_id = #{item.columnId} then #{item.javaField}
</if>
</foreach>
</trim>
<trim prefix="is_pk = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.isPk != null and item.isPk != ''">
when column_id = #{item.columnId} then #{item.isPk}
</if>
</foreach>
</trim>
<trim prefix="is_increment = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.isIncrement != null and item.isIncrement != ''">
when column_id = #{item.columnId} then #{item.isIncrement}
</if>
</foreach>
</trim>
<trim prefix="is_required = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.isRequired != null and item.isRequired != ''">
when column_id = #{item.columnId} then #{item.isRequired}
</if>
</foreach>
</trim>
<trim prefix="is_regular = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.isRegular != null and item.isRegular != ''">
when column_id = #{item.columnId} then #{item.isRegular}
</if>
</foreach>
</trim>
<trim prefix="is_insert = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.isInsert != null and item.isInsert != ''">
when column_id = #{item.columnId} then #{item.isInsert}
</if>
</foreach>
</trim>
<trim prefix="is_edit = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.isEdit != null and item.isEdit != ''">
when column_id = #{item.columnId} then #{item.isEdit}
</if>
</foreach>
</trim>
<trim prefix="is_list = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.isList != null and item.isList != ''">
when column_id = #{item.columnId} then #{item.isList}
</if>
</foreach>
</trim>
<trim prefix="is_query = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.isQuery != null and item.isQuery != ''">
when column_id = #{item.columnId} then #{item.isQuery}
</if>
</foreach>
</trim>
<trim prefix="query_type = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.queryType != null and item.queryType != ''">
when column_id = #{item.columnId} then #{item.queryType}
</if>
</foreach>
</trim>
<trim prefix="html_type = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.htmlType != null and item.htmlType != ''">
when column_id = #{item.columnId} then #{item.htmlType}
</if>
</foreach>
</trim>
<trim prefix="dict_type = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.dictType != null and item.dictType != ''">
when column_id = #{item.columnId} then #{item.dictType}
</if>
</foreach>
</trim>
<trim prefix="update_by = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.updateBy != null and item.updateBy != ''">
when column_id = #{item.columnId} then #{item.updateBy}
</if>
</foreach>
</trim>
<trim prefix="update_time = case" suffix="end,">
<foreach collection="list" separator=" " item="item">
<if test="item.updateTime != null">
when column_id = #{item.columnId} then #{item.updateTime}
</if>
</foreach>
</trim>
</set>
where column_id in
<foreach collection="list" item="item" index="index"
separator="," open="(" close=")">
#{item.columnId}
</foreach>
</update>
<delete id="deleteByTableIds" parameterType="Long">
delete from gen_table_column where table_id in
<foreach collection="list" item="tableId" open="(" separator="," close=")">
#{tableId}
</foreach>
</delete>
<delete id="deleteByTableId" parameterType="Long">
delete
from gen_table_column
where table_id = #{tableId}
</delete>
<delete id="batchRemove">
delete from gen_table_column where column_id in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

View File

@@ -0,0 +1,356 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.fateverse.code.mapper.TableMapper">
<resultMap type="cn.fateverse.code.entity.Table" id="TableResult">
<id property="tableId" column="table_id"/>
<result property="dataSourceId" column="data_source_id"/>
<result property="parentMenuId" column="parent_menu_id"/>
<result property="dataSourceType" column="data_source_type"/>
<result property="tableName" column="table_name"/>
<result property="tableComment" column="table_comment"/>
<result property="subTableName" column="sub_table_name"/>
<result property="subTableFkName" column="sub_table_fk_name"/>
<result property="className" column="class_name"/>
<result property="tplCategory" column="tpl_category"/>
<result property="packageName" column="package_name"/>
<result property="serviceName" column="service_name"/>
<result property="moduleName" column="module_name"/>
<result property="businessName" column="business_name"/>
<result property="functionName" column="function_name"/>
<result property="functionAuthor" column="function_author"/>
<result property="backTemplate" column="back_template"/>
<result property="frontTemplate" column="front_template"/>
<result property="options" column="options"/>
<result property="optionApi" column="option_api"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<resultMap type="cn.fateverse.code.entity.TableColumn" id="TableColumnResult">
<id property="columnId" column="column_id"/>
<result property="tableId" column="table_id"/>
<result property="columnName" column="column_name"/>
<result property="columnComment" column="column_comment"/>
<result property="columnType" column="column_type"/>
<result property="javaType" column="java_type"/>
<result property="javaField" column="java_field"/>
<result property="isPk" column="is_pk"/>
<result property="isIncrement" column="is_increment"/>
<result property="isRequired" column="is_required"/>
<result property="isInsert" column="is_insert"/>
<result property="isEdit" column="is_edit"/>
<result property="isList" column="is_list"/>
<result property="isQuery" column="is_query"/>
<result property="isRegular" column="is_regular"/>
<result property="regular" column="regular"/>
<result property="queryType" column="query_type"/>
<result property="htmlType" column="html_type"/>
<result property="dictType" column="dict_type"/>
<result property="sort" column="sort"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
</resultMap>
<resultMap id="TableResultDto" type="cn.fateverse.code.entity.dto.TableDto" extends="TableResult">
<collection property="columns" javaType="java.util.List" resultMap="TableColumnResult"/>
</resultMap>
<sql id="selectGenTable">
select table_id,
data_source_id,
data_source_type,
table_name,
table_comment,
sub_table_name,
sub_table_fk_name,
class_name,
tpl_category,
package_name,
service_name,
module_name,
business_name,
function_name,
function_author,
back_template,
front_template,
options,
option_api,
create_by,
create_time,
update_by,
update_time,
remark
from gen_table
</sql>
<select id="selectTableList" resultMap="TableResult">
<include refid="selectGenTable"/>
<where>
<if test="dataSourceId != null ">
and data_source_id = #{dataSourceId}
</if>
<if test="tableName != null and tableName != ''">
and lower(`table_name`) like lower(concat('%', #{tableName}, '%'))
</if>
<if test="tableComment != null and tableComment != ''">
and lower(table_comment) like lower(concat('%', #{tableComment}, '%'))
</if>
<if test="dataSourceType != null ">
and data_source_type like concat('%', #{dataSourceType}, '%')
</if>
<if test="startTime != null and startTime != ''"><!-- 开始时间检索 -->
and create_time,'%y%m%d') &gt;= #{startTime}
</if>
<if test="endTime != null and endTime != ''"><!-- 结束时间检索 -->
and create_time &lt;= #{endTime}
</if>
</where>
order by create_time desc
</select>
<!--todo 获取表信息 预览代码使用-->
<select id="selectTableDtoByTableId" parameterType="Long" resultMap="TableResultDto">
SELECT gt.table_id,
gt.data_source_id,
gt.parent_menu_id,
gt.data_source_type,
gt.table_name,
gt.table_comment,
gt.sub_table_name,
gt.sub_table_fk_name,
gt.class_name,
gt.tpl_category,
gt.package_name,
gt.service_name,
gt.module_name,
gt.business_name,
gt.function_name,
gt.function_author,
gt.options,
gt.option_api,
gt.remark,
gt.back_template,
gt.front_template,
gtc.column_id,
gtc.column_name,
gtc.column_comment,
gtc.column_type,
gtc.java_type,
gtc.java_field,
gtc.is_pk,
gtc.is_increment,
gtc.is_required,
gtc.is_insert,
gtc.is_edit,
gtc.is_list,
gtc.is_query,
gtc.query_type,
gtc.html_type,
gtc.dict_type,
gtc.sort,
gtc.is_regular,
gr.regular
FROM gen_table gt
LEFT JOIN gen_table_column gtc ON gt.table_id = gtc.table_id
LEFT JOIN gen_regular gr ON gtc.is_regular = gr.id
where gt.table_id = #{tableId}
order by gtc.sort
</select>
<!--todo 获取表信息 生成代码使用-->
<select id="selectTableByName" parameterType="String" resultMap="TableResultDto">
SELECT gt.table_id,
gt.data_source_id,
gt.parent_menu_id,
gt.data_source_type,
gt.table_name,
gt.table_comment,
gt.sub_table_name,
gt.sub_table_fk_name,
gt.class_name,
gt.tpl_category,
gt.package_name,
gt.service_name,
gt.module_name,
gt.business_name,
gt.function_name,
gt.function_author,
gt.back_template,
gt.front_template,
gt.options,
gt.option_api,
gt.remark,
gtc.column_id,
gtc.column_name,
gtc.column_comment,
gtc.column_type,
gtc.java_type,
gtc.java_field,
gtc.is_pk,
gtc.is_increment,
gtc.is_required,
gtc.is_insert,
gtc.is_edit,
gtc.is_list,
gtc.is_query,
gtc.query_type,
gtc.html_type,
gtc.dict_type,
gtc.sort,
gtc.is_regular,
gr.regular
FROM gen_table gt
LEFT JOIN gen_table_column gtc ON gt.table_id = gtc.table_id
LEFT JOIN gen_regular gr ON gtc.is_regular = gr.id
where gt.table_name = #{tableName}
order by gtc.sort
</select>
<!-- todo 查询数据库行配置信息-->
<select id="selectTableAll" parameterType="String" resultMap="TableResultDto">
SELECT gt.table_id,
gt.data_source_id,
gt.parent_menu_id,
gt.data_source_type,
gt.table_name,
gt.table_comment,
gt.sub_table_name,
gt.sub_table_fk_name,
gt.class_name,
gt.tpl_category,
gt.package_name,
gt.service_name,
gt.module_name,
gt.business_name,
gt.function_name,
gt.function_author,
gt.options,
gt.option_api,
gt.remark,
gt.back_template,
gt.front_template,
gtc.column_id,
gtc.column_name,
gtc.column_comment,
gtc.column_type,
gtc.java_type,
gtc.java_field,
gtc.is_pk,
gtc.is_increment,
gtc.is_required,
gtc.is_insert,
gtc.is_edit,
gtc.is_list,
gtc.is_query,
gtc.query_type,
gtc.html_type,
gtc.dict_type,
gtc.sort
FROM gen_table gt
LEFT JOIN gen_table_column gtc ON gt.table_id = gtc.table_id
order by gtc.sort
</select>
<select id="selectTableNameByDataSourceId" resultType="java.lang.String">
select table_name
from gen_table
where data_source_id = #{dataSourceId}
</select>
<select id="selectCheckTableByDataSourceId" resultType="java.lang.Long">
select count(*) from gen_table where data_source_id = #{dataSourceId} limit 1
</select>
<insert id="insertTable" useGeneratedKeys="true" keyProperty="tableId">
insert into gen_table
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="tableName != null">table_name,</if>
<if test="dataSourceId != null">data_source_id,</if>
<if test="parentMenuId != null">parent_menu_id,</if>
<if test="dataSourceType != null ">data_source_type,</if>
<if test="tableComment != null and tableComment != ''">table_comment,</if>
<if test="className != null and className != ''">class_name,</if>
<if test="tplCategory != null and tplCategory != ''">tpl_category,</if>
<if test="packageName != null and packageName != ''">package_name,</if>
<if test="moduleName != null and moduleName != ''">module_name,</if>
<if test="serviceName != null and serviceName != ''">service_name,</if>
<if test="businessName != null and businessName != ''">business_name,</if>
<if test="functionName != null and functionName != ''">function_name,</if>
<if test="functionAuthor != null and functionAuthor != ''">function_author,</if>
<if test="backTemplate != null">back_template,</if>
<if test="frontTemplate != null">front_template,</if>
<if test="optionApi != null and optionApi != ''">option_api,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="tableName != null">#{tableName},</if>
<if test="dataSourceId != null">#{dataSourceId},</if>
<if test="parentMenuId != null">#{parentMenuId},</if>
<if test="dataSourceType != null ">#{dataSourceType},</if>
<if test="tableComment != null and tableComment != ''">#{tableComment},</if>
<if test="className != null and className != ''">#{className},</if>
<if test="tplCategory != null and tplCategory != ''">#{tplCategory},</if>
<if test="packageName != null and packageName != ''">#{packageName},</if>
<if test="moduleName != null and moduleName != ''">#{moduleName},</if>
<if test="serviceName != null and serviceName != ''">#{serviceName},</if>
<if test="businessName != null and businessName != ''">#{businessName},</if>
<if test="functionName != null and functionName != ''">#{functionName},</if>
<if test="functionAuthor != null and functionAuthor != ''">#{functionAuthor},</if>
<if test="backTemplate != null">#{backTemplate},</if>
<if test="frontTemplate != null">#{frontTemplate},</if>
<if test="optionApi != null and optionApi != ''">#{optionApi},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
</trim>
</insert>
<update id="updateTable">
update gen_table
<set>
<if test="parentMenuId != null">parent_menu_id = #{parentMenuId},</if>
<if test="tableName != null and tableName != ''">table_name = #{tableName},</if>
<if test="tableComment != null and tableComment != ''">table_comment = #{tableComment},</if>
<if test="subTableName != null">sub_table_name = #{subTableName},</if>
<if test="subTableFkName != null">sub_table_fk_name = #{subTableFkName},</if>
<if test="className != null and className != ''">class_name = #{className},</if>
<if test="functionAuthor != null and functionAuthor != ''">function_author = #{functionAuthor},</if>
<if test="tplCategory != null and tplCategory != ''">tpl_category = #{tplCategory},</if>
<if test="packageName != null and packageName != ''">package_name = #{packageName},</if>
<if test="moduleName != null and moduleName != ''">module_name = #{moduleName},</if>
<if test="serviceName != null and serviceName != ''">service_name = #{serviceName},</if>
<if test="businessName != null and businessName != ''">business_name = #{businessName},</if>
<if test="functionName != null and functionName != ''">function_name = #{functionName},</if>
<if test="optionApi != null and optionApi != ''">option_api = #{optionApi},</if>
<if test="options != null and options != ''">`options` = #{options},</if>
<if test="backTemplate != null">back_template = #{backTemplate},</if>
<if test="frontTemplate != null">front_template = #{frontTemplate},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="updateTime != null and updateTime != ''">update_time = #{updateTime},</if>
</set>
where table_id = #{tableId}
</update>
<delete id="deleteTableByIds" parameterType="Long">
delete from gen_table where table_id in
<foreach collection="list" item="tableId" open="(" separator="," close=")">
#{tableId}
</foreach>
</delete>
<delete id="deleteTableById">
delete
from gen_table
where table_id = #{tableId}
</delete>
</mapper>

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.fateverse.code.mapper.dynamic.DynamicTableMapper">
<resultMap type="cn.fateverse.code.entity.Table" id="TableResult">
<result property="tableName" column="table_name" />
<result property="tableComment" column="table_comment" />
<result property="dataSourceType" column="data_source_type" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap type="cn.fateverse.code.entity.query.DynamicTable" id="DynamicTableResult">
<result property="tableName" column="table_name" />
<result property="tableComment" column="table_comment" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap type="cn.fateverse.code.entity.TableColumn" id="TableColumnResult">
<id property="columnId" column="column_id" />
<result property="tableId" column="table_id" />
<result property="columnName" column="column_name" />
<result property="columnComment" column="column_comment" />
<result property="columnType" column="column_type" />
<result property="columnLength" column="column_length" />
<result property="columnScale" column="column_scale" />
<result property="javaType" column="java_type" />
<result property="javaField" column="java_field" />
<result property="isPk" column="is_pk" />
<result property="isIncrement" column="is_increment" />
<result property="isRequired" column="is_required" />
<result property="isInsert" column="is_insert" />
<result property="isEdit" column="is_edit" />
<result property="isList" column="is_list" />
<result property="isQuery" column="is_query" />
<result property="queryType" column="query_type" />
<result property="htmlType" column="html_type" />
<result property="dictType" column="dict_type" />
<result property="sort" column="sort" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
</mapper>

View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.fateverse.code.mapper.dynamic.MySqlDynamicTableMapper">
<select id="checkSource" resultType="java.lang.Integer">
select 1 from dual
</select>
<select id="selectList" resultMap="cn.fateverse.code.mapper.dynamic.DynamicTableMapper.DynamicTableResult">
select table_name, table_comment, create_time, update_time
from information_schema.tables
where table_schema = (select database())
and table_name NOT LIKE 'gen_%'
<if test="table.tableName != null and table.tableName != ''">
and table_name like concat('%', #{table.tableName}, '%')
</if>
<if test="table.tableComment != null and table.tableComment != ''">
and table_comment like concat('%', #{table.tableComment}, '%')
</if>
<if test="table.startTime != null and table.endTime != null"><!-- 开始时间检索 -->
and create_time between #{table.startTime} and #{table.endTime}
</if>
<if test="list !=null and list.size!=0">
and table_name not in
<foreach collection="list" item="name" separator="," open="(" close=")" >
#{name}
</foreach>
</if>
limit #{page.startNum},#{page.endNum}
</select>
<select id="selectListCount" resultType="java.lang.Long">
select count(1)
from information_schema.tables
where table_schema = (select database())
and table_name NOT LIKE 'gen_%'
<if test="table.tableName != null and table.tableName != ''">
and table_name like concat('%', #{table.tableName}, '%')
</if>
<if test="table.tableComment != null and table.tableComment != ''">
and table_comment like concat('%', #{table.tableComment}, '%')
</if>
<if test="table.startTime != null and table.endTime != null"><!-- 开始时间检索 -->
and create_time between #{table.startTime} and #{table.endTime}
</if>
<if test="list !=null and list.size!=0">
and table_name not in
<foreach collection="list" item="name" separator="," open="(" close=")" >
#{name}
</foreach>
</if>
</select>
<!-- and table_name NOT LIKE 'gen_%' -->
<select id="selectListByNameList" resultMap="cn.fateverse.code.mapper.dynamic.DynamicTableMapper.TableResult">
select table_name, table_comment, create_time, update_time, 'MYSQL' as data_source_type
from information_schema.tables
where table_name not like 'gen_%'
and table_schema = (select database())
and table_name in
<foreach collection="list" item="name" open="(" separator="," close=")">
#{name}
</foreach>
</select>
<select id="selectColumnsByNameList" resultMap="cn.fateverse.code.mapper.dynamic.DynamicTableMapper.TableColumnResult">
select table_name as dict_type,column_name, (case when (is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI') then '1' else null end) as is_required, (case when column_key = 'PRI' then '1' else '0' end) as is_pk, ordinal_position as sort, column_comment, (case when extra = 'auto_increment' then '1' else '0' end) as is_increment, column_type
from information_schema.columns
where table_schema = (select database()) and table_name in
<foreach collection="list" item="name" open="(" separator="," close=")">
#{name}
</foreach>
order by ordinal_position
</select>
</mapper>

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.fateverse.code.mapper.dynamic.OracleDynamicTableMapper">
<select id="checkSource" resultType="java.lang.Integer">
select 1 from dual
</select>
<select id="selectList" resultMap="cn.fateverse.code.mapper.dynamic.DynamicTableMapper.DynamicTableResult">
select ut.table_name,utc.comments as table_comment,ut.last_analyzed as update_time
from user_tables ut
left join user_tab_comments utc on ut.table_name = utc.table_name
where rownum between #{page.startNum} and #{page.endNum}
<if test="table.tableName != null and table.tableName != ''">
and ut.table_name like concat(concat('%', #{table.tableName}), '%')
</if>
<if test="table.tableComment != null and table.tableComment != ''">
and utc.comments like concat(concat('%', #{table.tableComment}), '%')
</if>
<if test="table.startTime != null and table.endTime != null"><!-- 开始时间检索 -->
and update_time between #{table.startTime} and #{table.endTime}
</if>
<if test="list !=null and list.size!=0">
and ut.table_name not in
<foreach collection="list" item="name" separator="," open="(" close=")" >
#{name}
</foreach>
</if>
</select>
<select id="selectListCount" resultType="java.lang.Long">
select count(1)
from user_tables ut
left join user_tab_comments utc on ut.table_name = utc.table_name
<where>
<if test="table.tableName != null and table.tableName != ''">
and ut.table_name like concat(concat('%', #{table.tableName}), '%')
</if>
<if test="table.tableComment != null and table.tableComment != ''">
and utc.comments like concat(concat('%', #{table.tableComment}), '%')
</if>
<if test="table.startTime != null and table.endTime != null"><!-- 开始时间检索 -->
and ut.last_analyzed between #{table.startTime} and #{table.endTime}
</if>
<if test="list !=null and list.size!=0">
and ut.table_name not in
<foreach collection="list" item="name" separator="," open="(" close=")" >
#{name}
</foreach>
</if>
</where>
</select>
<!-- and table_name NOT LIKE 'gen_%' -->
<select id="selectListByNameList" resultMap="cn.fateverse.code.mapper.dynamic.DynamicTableMapper.TableResult">
select ut.table_name,utc.comments as table_comment,ut.last_analyzed as update_time,'ORACLE' as data_source_type
from user_tables ut
left join user_tab_comments utc on ut.table_name = utc.table_name
where ut.table_name in
<foreach collection="list" item="name" separator="," open="(" close=")" >
#{name}
</foreach>
</select>
<select id="selectColumnsByNameList" resultMap="cn.fateverse.code.mapper.dynamic.DynamicTableMapper.TableColumnResult">
select distinct utc.column_name,
utc.table_name as dict_type,
utc.data_type as column_type,
utc.data_length as column_length,
utc.data_scale as column_scale,
(case when utc.nullable = 'N' then '1' else '0' end) as is_required ,
utc.column_id as sort,
(case when uc.constraint_type = 'P' then '1' else '0' end) as is_pk ,
ucc.comments as column_comment
from user_tab_columns utc
inner join user_col_comments ucc on ucc.column_name = utc.column_name and ucc.table_name = utc.table_name
left join user_cons_columns uccs on uccs.column_name = utc.column_name
left join user_constraints uc on uc.constraint_name = uccs.constraint_name
where uc.search_condition is null
and utc.table_name in
<foreach collection="list" item="name" open="(" separator="," close=")">
#{name}
</foreach>
order by utc.column_id
</select>
</mapper>

View File

@@ -0,0 +1,106 @@
package ${packageName}.controller;
import ${packageName}.entity.dto.${ClassName}Dto;
import ${packageName}.entity.query.${ClassName}Query;
import ${packageName}.entity.vo.${ClassName}Vo;
import ${packageName}.service.${ClassName}Service;
import cn.fateverse.common.core.result.Result;
#if($table.hasOptionApi())
import cn.fateverse.common.core.entity.Option;
#end
import cn.fateverse.common.core.result.page.TableDataInfo;
import cn.fateverse.common.core.utils.ObjectUtils;
import cn.fateverse.common.log.annotation.Log;
import cn.fateverse.common.log.enums.BusinessType;
import cn.fateverse.common.excel.utils.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* ${functionName} Controller
*
* @author ${author}
* @date ${dateTime}
*/
@Api(value = "${functionName}管理",tags = "${functionName}管理")
@RestController
@RequestMapping("/${moduleName}/${businessName}")
public class ${ClassName}Controller {
private final ${ClassName}Service ${className}Service;
public ${ClassName}Controller(${ClassName}Service ${className}Service) {
this.${className}Service = ${className}Service;
}
@ApiOperation("获取${functionName}列表")
@GetMapping
@PreAuthorize("@ss.hasPermission('${permissionPrefix}:list')")
public Result<TableDataInfo<${ClassName}Vo>> list(${ClassName}Query query) {
TableDataInfo<${ClassName}Vo> dataInfo = ${className}Service.searchList(query);
return Result.ok(dataInfo);
}
#if($table.hasOptionApi())
@ApiOperation("获取校验规则option")
@GetMapping("/option")
public Result<List<Option>> option(){
List<Option> options = ${className}Service.searchOptionList();
return Result.ok(options);
}
#end
@ApiOperation("导出excel数据")
@GetMapping("/export")
@PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')")
public void export(${ClassName}Query query){
List<${ClassName}Vo> list = ${className}Service.exportList(query);
ExcelUtil.exportExcel(list,${ClassName}Vo.class);
}
@ApiOperation("获取${functionName}详细信息")
@GetMapping("/{${pkColumn.javaField}}")
@PreAuthorize("@ss.hasPermission('${permissionPrefix}:info')")
public Result<${ClassName}Vo> info(@PathVariable ${pkColumn.javaType} ${pkColumn.javaField}) {
ObjectUtils.checkPk(${pkColumn.javaField});
${ClassName}Vo ${className} = ${className}Service.searchById(${pkColumn.javaField});
return Result.ok(${className});
}
@ApiOperation("新增${functionName}")
@PostMapping
@Log(title = "新增${functionName}",businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermission('${permissionPrefix}:add')")
public Result<Void> add(@RequestBody @Validated ${ClassName}Dto ${className}){
${className}Service.save(${className});
return Result.ok();
}
@ApiOperation("修改${functionName}")
@PutMapping
@Log(title = "修改${functionName}",businessType = BusinessType.UPDATE)
@PreAuthorize("@ss.hasPermission('${permissionPrefix}:edit')")
public Result<Void> edit(@RequestBody @Validated ${ClassName}Dto ${className}){
ObjectUtils.checkPk(${className}.get${table.capitalize(${pkColumn.javaField})}());
${className}Service.edit(${className});
return Result.ok();
}
@ApiOperation("删除${functionName}")
@DeleteMapping("/{${pkColumn.javaField}List}")
@Log(title = "删除${functionName}",businessType = BusinessType.DELETE)
@PreAuthorize("@ss.hasPermission('${permissionPrefix}:del')")
public Result<Void> batchDel(@PathVariable List<${pkColumn.javaType}> ${pkColumn.javaField}List){
ObjectUtils.checkPkList(${pkColumn.javaField}List);
${className}Service.removeBatch(${pkColumn.javaField}List);
return Result.ok();
}
}

View File

@@ -0,0 +1,37 @@
package ${packageName}.entity;
import cn.fateverse.common.core.annotaion.EnableAutoField;
import cn.fateverse.common.core.entity.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
#if($table.hasDateDto())
import java.util.Date;
#end
/**
* ${functionName}对象 ${tableName}
*
* @author ${author}
* @date ${dateTime}
*/
@Data
@Builder
@EnableAutoField
@AllArgsConstructor
@NoArgsConstructor
public class ${ClassName} extends BaseEntity{
#foreach ($column in $columns)
#if(!$column.isSuperColumn($column.javaField))
/**
* $column.columnComment
*/
private $column.javaType $column.javaField;
#end
#end
}

View File

@@ -0,0 +1,77 @@
package ${packageName}.entity.dto;
import ${packageName}.entity.${ClassName};
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
#if($table.isRequired())
import javax.validation.constraints.NotNull;
#end
#if($table.isRegular())
import javax.validation.constraints.Pattern;
#end
#if($table.hasDateDto())
import java.util.Date;
#end
/**
* ${functionName}对象 ${tableName}
*
* @author ${author}
* @date ${dateTime}
*/
@Data
@ApiModel("${functionName}Dto")
public class ${ClassName}Dto {
/**
* ${pkColumn.columnComment}
*/
@ApiModelProperty("${pkColumn.columnComment}")
private $pkColumn.javaType $pkColumn.javaField;
#foreach ($column in $columns)
#if($column.from())
/**
* $column.columnComment
*/
#if($column.required())
@NotNull(message = "${column.columnComment}不能为空!")
#end
#if($column.isRegular())
@Pattern(regexp = "${column.regular}",message = "${column.columnComment}格式错误!")
#end
@ApiModelProperty("${column.columnComment}")
private $column.javaType $column.javaField;
#end
#end
public ${ClassName} to${ClassName}() {
#if($table.hasDateDto())
${ClassName} build = ${ClassName}.builder()
.${pkColumn.javaField}(${pkColumn.javaField})
#foreach ($column in $columns)
#if((1 == $column.isEdit || 1 == $column.isInsert) && !($table.isEntityTime(${column.javaField})))
.${column.javaField}(${column.javaField})
#end
#end
.build();
#foreach ($column in $columns)
#if((1 == $column.isEdit || 1 == $column.isInsert) && $table.isEntityTime(${column.javaField}))
build.set${table.capitalize(${column.javaField})}(${column.javaField});
#end
#end
return build;
#else
return ${ClassName}.builder()
.${pkColumn.javaField}(${pkColumn.javaField})
#foreach ($column in $columns)
#if(1 == $column.isEdit || 1 == $column.isInsert)
.${column.javaField}(${column.javaField})
#end
#end
.build();
#end
}
}

View File

@@ -0,0 +1,59 @@
package ${packageName}.entity.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
#if($table.hasDateQuery())
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
#end
/**
* ${functionName}对象 ${tableName}
*
* @author ${author}
* @date ${dateTime}
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("${functionName}Query")
public class ${ClassName}Query {
#foreach ($column in $columns)
#if($column.query())
#if("BETWEEN" != $column.queryType)
/**
* $column.columnComment
*/
@ApiModelProperty("${column.columnComment}")
#if($column.javaType.equals("Date"))
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
#end
private $column.javaType $column.javaField;
#else
/**
* $column.columnComment 开始
*/
@ApiModelProperty("${column.columnComment}开始")
#if($column.javaType.equals("Date"))
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
#end
private $column.javaType begin${table.capitalize($column.javaField)};
/**
* $column.columnComment 结束
*/
@ApiModelProperty("${column.columnComment}结束")
#if($column.javaType.equals("Date"))
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
#end
private $column.javaType end${table.capitalize($column.javaField)};
#end
#end
#end
}

View File

@@ -0,0 +1,56 @@
package ${packageName}.entity.vo;
import ${packageName}.entity.${ClassName};
import cn.fateverse.common.core.annotaion.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
#if($table.hasDateDto())
#end
/**
* ${functionName}对象 ${tableName}
*
* @author ${author}
* @date ${dateTime}
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("${functionName}Vo")
public class ${ClassName}Vo {
/**
* ${pkColumn.columnComment}
*/
@ApiModelProperty("${pkColumn.columnComment}")
private $pkColumn.javaType $pkColumn.javaField;
#foreach ($column in $columns)
#if($column.list())
/**
* $column.columnComment
*/
@ApiModelProperty("${column.columnComment}")
@Excel("${column.columnComment}")
private $column.javaType $column.javaField;
#end
#end
public static ${ClassName}Vo to${ClassName}Vo(${ClassName} ${className}) {
return ${ClassName}Vo.builder()
.${pkColumn.javaField}(${className}.get${table.capitalize(${pkColumn.javaField})}())
#foreach ($column in $columns)
#if($column.list())
.${column.javaField}(${className}.get${table.capitalize(${column.javaField})}())
#end
#end
.build();
}
}

View File

@@ -0,0 +1,64 @@
package ${packageName}.mapper;
import ${packageName}.entity.${ClassName};
import ${packageName}.entity.query.${ClassName}Query;
import java.util.List;
/**
* ${functionName} Mapper
*
* @author ${author}
* @date ${dateTime}
*/
public interface ${ClassName}Mapper {
/**
* 查询${functionName}
*
* @param ${pkColumn.javaField} ${functionName}Id
* @return ${functionName}
*/
${ClassName} selectById(${pkColumn.javaType} ${pkColumn.javaField});
/**
* 查询${functionName}列表
*
* @param query ${functionName}查询
* @return ${functionName}集合
*/
List<${ClassName}> selectList(${ClassName}Query query);
/**
* 新增${functionName}
*
* @param ${className} ${functionName}
* @return 结果
*/
int insert(${ClassName} ${className});
/**
* 修改${functionName}
*
* @param ${className} ${functionName}
* @return 结果
*/
int update(${ClassName} ${className});
/**
* 删除${functionName}
*
* @param ${pkColumn.javaField} 需要删除的${functionName}Id
* @return 结果
*/
int deleteById(${pkColumn.javaType} ${pkColumn.javaField});
/**
* 批量删除${functionName}
*
* @param ${pkColumn.javaField}List 需要删除的${functionName}Id 集合
* @return 结果
*/
int deleteBatchByIdList(List<${pkColumn.javaType}> ${pkColumn.javaField}List);
}

View File

@@ -0,0 +1,99 @@
package ${packageName}.service.impl;
import ${packageName}.entity.${ClassName};
import ${packageName}.entity.dto.${ClassName}Dto;
import ${packageName}.entity.vo.${ClassName}Vo;
import ${packageName}.entity.query.${ClassName}Query;
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.service.${ClassName}Service;
#if($table.hasOptionApi())
import cn.fateverse.common.core.entity.Option;
#end
import cn.fateverse.common.core.result.page.TableDataInfo;
import cn.fateverse.common.mybatis.utils.PageUtils;
import cn.fateverse.common.security.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* ${functionName} Controller
*
* @author ${author}
* @date ${dateTime}
*/
@Slf4j
@Service
public class ${ClassName}ServiceImpl implements ${ClassName}Service {
private final ${ClassName}Mapper ${className}Mapper;
public ${ClassName}ServiceImpl(${ClassName}Mapper ${className}Mapper) {
this.${className}Mapper = ${className}Mapper;
}
@Override
public ${ClassName}Vo searchById(${pkColumn.javaType} ${pkColumn.javaField}){
${ClassName} ${className} = ${className}Mapper.selectById(${pkColumn.javaField});
return ${ClassName}Vo.to${ClassName}Vo(${className});
}
@Override
public TableDataInfo<${ClassName}Vo> searchList(${ClassName}Query query){
PageUtils.startPage();
List<${ClassName}> list = ${className}Mapper.selectList(query);
return PageUtils.convertDataTable(list, ${ClassName}Vo::to${ClassName}Vo);
}
#if($table.hasOptionApi())
@Override
public List<Option> searchOptionList(){
${ClassName}Query query = new ${ClassName}Query();
List<${ClassName}> list = ${className}Mapper.selectList(query);
return list.stream().map(item-> Option.builder()
.value(item.get${table.getOptionValueFiled()}())
.label(item.get${table.getOptionLabelFiled()}())
.build()).collect(Collectors.toList());
}
#end
@Override
public List<${ClassName}Vo> exportList(${ClassName}Query query){
List<${ClassName}> list = ${className}Mapper.selectList(query);
return list.stream().map(${ClassName}Vo::to${ClassName}Vo)
.collect(Collectors.toList());
}
@Override
@Transactional(rollbackFor = Exception.class)
public int save(${ClassName}Dto ${className}){
${ClassName} info = ${className}.to${ClassName}();
info.setCreateBy(SecurityUtils.getUsername());
return ${className}Mapper.insert(info);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int edit(${ClassName}Dto ${className}){
${ClassName} info = ${className}.to${ClassName}();
info.setUpdateBy(SecurityUtils.getUsername());
return ${className}Mapper.update(info);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int removeById(${pkColumn.javaType} ${pkColumn.javaField}){
return ${className}Mapper.deleteById(${pkColumn.javaField});
}
@Override
@Transactional(rollbackFor = Exception.class)
public int removeBatch(List<${pkColumn.javaType}> ${pkColumn.javaField}List){
return ${className}Mapper.deleteBatchByIdList(${pkColumn.javaField}List);
}
}

View File

@@ -0,0 +1,15 @@
package ${packageName}.mapper;
import ${packageName}.entity.${ClassName};
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* ${functionName} Mapper
*
* @author ${author}
* @date ${dateTime}
*/
public interface ${ClassName}Mapper extends BaseMapper<${ClassName}>{
}

View File

@@ -0,0 +1,125 @@
package ${packageName}.service.impl;
import ${packageName}.entity.${ClassName};
import ${packageName}.entity.dto.${ClassName}Dto;
import ${packageName}.entity.vo.${ClassName}Vo;
import ${packageName}.entity.query.${ClassName}Query;
import ${packageName}.mapper.${ClassName}Mapper;
import ${packageName}.service.${ClassName}Service;
#if($table.hasOptionApi())
import cn.fateverse.common.core.entity.Option;
#end
import cn.fateverse.common.core.result.page.TableDataInfo;
import cn.fateverse.common.mybatisplus.utils.PageUtils;
import cn.fateverse.common.security.utils.SecurityUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* ${functionName} Controller
*
* @author ${author}
* @date ${dateTime}
*/
@Slf4j
@Service
public class ${ClassName}ServiceImpl implements ${ClassName}Service {
private final ${ClassName}Mapper ${className}Mapper;
private final List<String> columnNames = Arrays.asList(${table.getFieldList()});
public ${ClassName}ServiceImpl(${ClassName}Mapper ${className}Mapper) {
this.${className}Mapper = ${className}Mapper;
}
@Override
public ${ClassName}Vo searchById(${pkColumn.javaType} ${pkColumn.javaField}){
${ClassName} ${className} = ${className}Mapper.selectById(${pkColumn.javaField});
return ${ClassName}Vo.to${ClassName}Vo(${className});
}
@Override
public TableDataInfo<${ClassName}Vo> searchList(${ClassName}Query query){
Page<${ClassName}> page = ${className}Mapper.selectPage(PageUtils.getPage(), buildQueryWrapper(query));
return PageUtils.convertDataTable(page, ${ClassName}Vo::to${ClassName}Vo);
}
#if($table.hasOptionApi())
@Override
public List<Option> searchOptionList(){
LambdaQueryWrapper<Carousel> lqw = new LambdaQueryWrapper<>();
List<${ClassName}> list = ${className}Mapper.selectList(lqw);
return list.stream().map(item-> Option.builder()
.value(item.get${table.getOptionValueFiled()})
.label(item.get${table.getOptionLabelFiled()})
.build()).collect(Collectors.toList())
}
#end
@Override
public List<${ClassName}Vo> exportList(${ClassName}Query query){
List<${ClassName}> list = ${className}Mapper.selectList(buildQueryWrapper(query));
return list.stream().map(${ClassName}Vo::to${ClassName}Vo)
.collect(Collectors.toList());
}
public LambdaQueryWrapper<Carousel> buildQueryWrapper(${ClassName}Query query) {
LambdaQueryWrapper<Carousel> lqw = new LambdaQueryWrapper<>();
lqw.select(Carousel.class,e->columnNames.contains(e.getColumn()))
#foreach($column in $columns)
#if($column.query())
#set($mpMethod=$column.queryType.toLowerCase())
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#if($queryType != 'BETWEEN')
#if($column.javaType == 'String')
#set($condition='!StrUtil.isBlank(query.get'+$AttrName+'())')
#else
#set($condition='query.get'+$AttrName+'() != null')
#end
.$mpMethod($condition, ${ClassName}::get$AttrName, query.get$AttrName())
#else
.between('query.getBegin$AttrName' != null && 'query.getEnd$AttrName' != null,
${ClassName}::get$AttrName ,'query.getBegin$AttrName', 'query.getBegin$AttrName')
#end#end#end;
return lqw;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int save(${ClassName}Dto ${className}){
${ClassName} info = ${className}.to${ClassName}();
info.setCreateBy(SecurityUtils.getUsername());
return ${className}Mapper.insert(info);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int edit(${ClassName}Dto ${className}){
${ClassName} info = ${className}.to${ClassName}();
info.setUpdateBy(SecurityUtils.getUsername());
return ${className}Mapper.updateById(info);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int removeById(${pkColumn.javaType} ${pkColumn.javaField}){
return ${className}Mapper.deleteById(${pkColumn.javaField});
}
@Override
@Transactional(rollbackFor = Exception.class)
public int removeBatch(List<${pkColumn.javaType}> ${pkColumn.javaField}List){
return ${className}Mapper.deleteBatchIds(${pkColumn.javaField}List);
}
}

View File

@@ -0,0 +1,86 @@
package ${packageName}.service;
import ${packageName}.entity.dto.${ClassName}Dto;
import ${packageName}.entity.vo.${ClassName}Vo;
import ${packageName}.entity.query.${ClassName}Query;
#if($table.hasOptionApi())
import cn.fateverse.common.core.entity.Option;
#end
import cn.fateverse.common.core.result.page.TableDataInfo;
import java.util.List;
/**
* ${functionName} Service
*
* @author ${author}
* @date ${dateTime}
*/
public interface ${ClassName}Service {
/**
* 查询${functionName}
*
* @param ${pkColumn.javaField} ${functionName}Id
* @return ${functionName}
*/
${ClassName}Vo searchById(${pkColumn.javaType} ${pkColumn.javaField});
/**
* 查询${functionName}列表
*
* @param query ${functionName}
* @return ${functionName}集合
*/
TableDataInfo<${ClassName}Vo> searchList(${ClassName}Query query);
/**
* 查询${functionName}option
*
* @return 选项集合
*/
#if($table.hasOptionApi())
List<Option> searchOptionList();
#end
/**
* 导出${functionName}列表
*
* @param query query ${functionName}
* @return ${functionName}集合
*/
List<${ClassName}Vo> exportList(${ClassName}Query query);
/**
* 新增${functionName}
*
* @param ${className} ${functionName}
* @return 结果
*/
int save(${ClassName}Dto ${className});
/**
* 修改${functionName}
*
* @param ${className} ${functionName}
* @return 结果
*/
int edit(${ClassName}Dto ${className});
/**
* 删除${functionName}
*
* @param ${pkColumn.javaField} 需要删除的${functionName}Id
* @return 结果
*/
int removeById(${pkColumn.javaType} ${pkColumn.javaField});
/**
* 批量删除${functionName}
*
* @param ${pkColumn.javaField}List 需要删除的${functionName}Id 集合
* @return 结果
*/
int removeBatch(List<${pkColumn.javaType}> ${pkColumn.javaField}List);
}

View File

@@ -0,0 +1,54 @@
import request from "../../utils/http";
// 请求${functionName}list
export const get${ClassName}List = (params:object|undefined) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}',
method: 'get',
params
})
}
//获取到option列表
#if($table.hasOptionApi())
export const get${ClassName}Opt = () => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}/option',
method: 'get',
})
}
#end
// 获取${functionName}详情
export const get${ClassName}Details = (${className}Id: number) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}/' + ${className}Id,
method: 'get'
})
}
// 新增${functionName}
export const add${ClassName} = (data:object) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}',
method: 'post',
data
})
}
// 修改${functionName}
export const edit${ClassName} = (data: object) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}',
method: 'put',
data
})
}
// 删除${functionName}
export const del${ClassName} =(${className}Id: number) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}/' + ${className}Id,
method: 'delete'
})
}

View File

@@ -0,0 +1,10 @@
import { IBaseDataType } from "..";
// 表格${functionName}数据类型规范
export interface ${ClassName}Type extends IBaseDataType {
#foreach ($column in $columns)
#if(!$column.isSuperColumn($column.javaField))
${column.javaField}:#if("String" == $column.javaType) string#else number#end,
#end
#end
}

View File

@@ -0,0 +1,323 @@
import { Button, Col, Form, Input, message, Modal, Radio, Row, Space } from "antd";
import { PlusCircleTwoTone, EditTwoTone, DeleteTwoTone, ExclamationCircleOutlined } from '@ant-design/icons'
import Table, { ColumnsType } from "antd/lib/table";
import { TableRowSelection } from "antd/lib/table/interface";
import React, { Fragment, useEffect, useReducer, useState } from "react";
import { get${ClassName}List, get${ClassName}Details, add${ClassName}, edit${ClassName}, del${ClassName} } from "../../api/${businessName}";
#if($table.hasDictSelect())
import { DTag } from "../../components/DTag";
import { getCacheType } from "../../utils/cache";
#end
import SearchForm from "../../components/SearchForm";
import { IModalConfig, IResponse } from "../../type";
import { DataType } from "../../type/${businessName}";
import confirm from "antd/lib/modal/confirm";
import { parseDateTime, queryReducer, reducerPagination } from "../../utils/tool";
// 初始化搜索条件
const initQueryParams = {
#foreach ($column in $columns)
#if("1" == $column.isQuery)
$column.javaField:#if("String" == $column.javaType) ''#else undefined#end,
#end
#end
pageSize: 10,
pageNum: 1
}
const reducerSearch = (state: any, newState: any) =>{
return {
#foreach ($column in $columns)
#if("1" == $column.isQuery)
$column.javaField: state.$column.javaField = newState.$column.javaField,
#end
#end
pageSize: state.pageSize = newState.pageSize,
pageNum: state.pageNum = newState.pageNum,
}
}
function ${ClassName}() {
//搜索条件
const [queryParams, setQueryParams] = useReducer( queryReducer ,initQueryParams)
#foreach ($column in $columns)
#if("select" == $column.htmlType && ${table.strNotEmpty($column.dictType)})
//todo字典 下拉框options 动态判断
const [${column.javaField}OptionList, set${table.capitalize($column.javaField)}OptionList] = useState<any>([])
//单选options
const [${column.javaField}RadioOption, set${table.capitalize($column.javaField)}RadioOption] = useState<any>()
#end
#end
//数据总数
const [total, setTotal] = useState<number>()
//表格list
const [list, setList] = useState<Array<DataType>>()
//表格数据加载中
const [loading, setLoading] = useState<boolean>(false)
//表格多选是否勾选
const [checkStrictly, setCheckStrictly] = useState(false);
//弹窗config
const [modalConfig, setModalConfig] = useState<IModalConfig>();
//formHooks
const [form] = Form.useForm()
//所选数据id
const [${pkColumn.javaField}, set${table.capitalize($pkColumn.javaField)}] = useState<number>()
//所选数据ids
const [${pkColumn.javaField}s, set${table.capitalize($pkColumn.javaField)}s] = useState<Array<any>>([])
//筛选表单配置
const searchConfig = {
name: 'searchForm',
formItem: [
#foreach ($column in $columns)
#if("1" == $column.isQuery)
{
name: '${column.columnComment}',
type: '${column.htmlType}',
key: '${column.javaField}',
#if("select"==$column.htmlType)
options: ${column.javaField}OptionList
#end
},
#end
#end
]
} as object
// 表格列数据
const colums: ColumnsType<DataType> = [
#foreach ($column in $columns)
#if("1" == $column.isList)
{
title: '${column.columnComment}',
key: '${column.javaField}',
dataIndex: '${column.javaField}',
#if("select" == $column.htmlType && ${table.strNotEmpty($column.dictType)})
render: ((_, { ${column.javaField} }) => {
return (
<DTag options={${column.javaField}OptionList} state={${column.javaField}} />
)
})
#end
},
#end
#end
{
title: '操作',
key: 'action',
align: 'center',
render: ((_, record) => (
<Space size="middle">
<Button type="link" onClick={() => handleEdit(record)}>修改</Button>
<Button type="text" onClick={() => handleDel(record)} danger>删除</Button>
</Space>
))
}
]
//获取${functionName}list
const getList = () => {
setLoading(true)
get${ClassName}List(queryParams).then((res: IResponse) => {
setList(res.data.rows)
setTotal(res.data.total)
setLoading(false)
})
}
// 点击添加
const handleAdd = () => {
#foreach ($column in $columns)
#if("1" == $column.isInsert && "select" == $column.htmlType && ${table.strNotEmpty($column.dictType)})
set${table.capitalize($column.javaField)}RadioOption(${column.javaField}OptionList)
#end
#end
setModalConfig({ title: '添加', open: true, confirmLoading: false })
}
// 点击修改
const handleEdit = (row:any) => {
const ${pkColumn.javaField} = row.${pkColumn.javaField}|| ${pkColumn.javaField}s[0];
set${table.capitalize($pkColumn.javaField)}(${pkColumn.javaField});
#foreach ($column in $columns)
#if("1" == $column.isInsert && "select" == $column.htmlType && ${table.strNotEmpty($column.dictType)})
set${table.capitalize($column.javaField)}RadioOption(${column.javaField}OptionList)
#end
#end
get${ClassName}Details(${pkColumn.javaField}).then((res: IResponse) => {
form.setFieldsValue({...res.data})
setModalConfig({ title: '修改', open: true, confirmLoading: false })
})
}
// 点击删除
const handleDel = (row:any) => {
const ${pkColumn.javaField} = row.${pkColumn.javaField} || ${pkColumn.javaField}s[0];
confirm({
title: '确定删除这一项吗?',
icon: <ExclamationCircleOutlined />,
content: `详情主键为: `+ row.${pkColumn.javaField},
onOk() {
del${ClassName}(${pkColumn.javaField}).then((res: IResponse) => {
if (res.code === 1000) {
message.success(res.msg)
getList()
} else {
message.error(res.msg)
}
})
},
onCancel() {
},
});
}
// 点击提交
const handleSubmit = () => {
const obj = form.getFieldsValue();
if(modalConfig?.title === '添加') {
add${ClassName}(obj).then((res: IResponse) => {
setModalConfig({ title: '添加', open: true, confirmLoading: true })
if(res.code === 1000) {
message.success('添加成功');
setModalConfig({ title: '添加', open: true, confirmLoading: false })
handleCancel()
getList()
}else {
message.error(res.msg);
setModalConfig({ title: '添加', open: true, confirmLoading: false })
}
})
}else {
const objE = {${pkColumn.javaField}, ...obj}
edit${ClassName}(objE).then((res: IResponse) => {
setModalConfig({ title: '修改', open: true, confirmLoading: true })
if (res.code === 1000) {
message.success('修改成功')
setModalConfig({ title: '修改', open: true, confirmLoading: false })
handleCancel()
getList()
} else {
message.error(res.msg)
setModalConfig({ title: '修改', open: true, confirmLoading: false })
}
})
}
}
// 点击取消
const handleCancel = () => {
form.resetFields();
setModalConfig({ title: '', open: false, confirmLoading: false })
}
// 分页
const pagination = (pageNum: any,pageSize: any) => {
new Promise((resolve,reject) => {
setQueryParams({type: 'pagination', data: {pageNum,pageSize }})
resolve(true)
}).then((res: any) => {
getList()
})
}
// 行数据选择
const rowSelection: TableRowSelection<DataType> = {
onChange: (selectedRowKeys, selectedRows) => {
console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
set${table.capitalize($pkColumn.javaField)}s(Array.from(selectedRowKeys))
},
onSelect: (record, selected, selectedRows) => {
console.log(record, selected, selectedRows);
},
onSelectAll: (selected, selectedRows, changeRows) => {
console.log(selected, selectedRows, changeRows);
},
};
// 筛选表单提交事件
const submit = (v: any) => {
const {#foreach ($column in $columns)#if("1" == $column.isQuery)${column.javaField}, #end#end} = v
const query = {
#foreach ($column in $columns)
#if("1" == $column.isQuery)
${column.javaField},
#end
#end
pageSize: 10,
pageNum: 1
}
new Promise( (resolve, reject) => {
setQueryParams({ type: 'search', data: query, void: reducerSearch})
resolve(true)
}).then((res)=>{
getList()
})
}
#if($table.hasDictSelect())
//获取筛选表单下拉框缓存数据
const getSelectOptions = async () => {
#foreach ($column in $columns)
#if("1" == $column.isInsert && "select" == $column.htmlType && ${table.strNotEmpty($column.dictType)})
const ${column.javaField}Options = await getCacheType('${column.dictType}').then((options: any) => {
return options
})
set${table.capitalize($column.javaField)}OptionList(${column.javaField}Options)
#end
#end
}
#end
useEffect(() => {
getSelectOptions();
getList()
}, [])
return (
<Fragment>
<SearchForm config={searchConfig} submit={submit}/>
<div className="table-headbtn-box">
<Button icon={<PlusCircleTwoTone />} type="primary" size="middle" className="table-headbtn" onClick={handleAdd}>添加</Button>
<Button icon={<EditTwoTone />} type="primary" ghost className="table-headbtn" onClick={handleEdit} disabled={${pkColumn.javaField}s.length != 1} >修改</Button>
<Button icon={<DeleteTwoTone />} type="primary" danger className="table-headbtn" disabled={${pkColumn.javaField}s.length != 1} >删除</Button>
</div>
<Table
columns={colums}
dataSource={list}
loading={loading}
rowSelection={{ ...rowSelection, checkStrictly }}
pagination={{ total, onChange: pagination }}
rowKey='${pkColumn.javaField}'
/>
<Modal
open={modalConfig?.open}
title={modalConfig?.title}
onOk={handleSubmit}
onCancel={handleCancel}
confirmLoading={modalConfig?.confirmLoading}
width={700}
>
<Form
name="form"
form={form}
labelAlign='right'
labelCol={{
span: 6,
offset: 0
}}
>
<Row>
#foreach ($column in $columns)
#if("1" == $column.isInsert || "1" == $column.isEdit)
<Col span={12}>
<Form.Item
label="${column.columnComment}"
name="${column.javaField}"
required
>
#if("select" == $column.htmlType && ${table.strNotEmpty($column.dictType)})
<Radio.Group options={${column.javaField}RadioOption} />
#else
<Input placeholder="请输入${column.columnComment}" />
#end
</Form.Item>
</Col>
#end
#end
</Row>
</Form>
</Modal>
</Fragment>
)
}
export default ${ClassName};

View File

@@ -0,0 +1,55 @@
import request from '@/utils/request.js'
// 请求${functionName}list
export const get${ClassName}List = (params) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}',
method: 'get',
params
})
}
//获取到option列表
#if($table.hasOptionApi())
export const get${ClassName}Opt = () => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}/option',
method: 'get',
})
}
#end
// 获取${functionName}详情
export const get${ClassName}Details = (${className}Id) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}/' + ${className}Id,
method: 'get'
})
}
// 新增${functionName}
export const add${ClassName} = (data) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}',
method: 'post',
data
})
}
// 修改${functionName}
export const edit${ClassName} = (data) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}',
method: 'put',
data
})
}
// 删除${functionName}
export const del${ClassName} =(${className}Id) => {
return request({
url: '/${serviceName}/${moduleName}/${businessName}/' + ${className}Id,
method: 'delete'
})
}

View File

@@ -0,0 +1,353 @@
<template>
<el-form :model="queryParams" inline class="query-form" ref="queryForm">
#foreach($column in $columns)
#if($column.query())
#set($comment=$column.comment())
#if($column.isInput())
<el-form-item label="${comment}" prop="${column.javaField}">
<el-input v-model="queryParams.${column.javaField}" placeholder="请输${comment}"></el-input>
</el-form-item>
#elseif(($column.isSelect() || $column.isRadio()) && $column.isDict())
<el-form-item label="${comment}" prop="${column.javaField}">
<el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable >
<el-option
v-for="dict in cacheStore.getDict('${column.dictType}')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
#elseif(($column.isSelect() || $column.isRadio()) && !$column.isDict())
<el-form-item label="${comment}" prop="${column.javaField}">
<el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable >
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
#elseif($column.isDatetime() && !$column.isBetween())
<el-form-item label="${comment}" prop="${column.javaField}">
<el-date-picker clearable size="small"
v-model="queryParams.${column.javaField}"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择${comment}">
</el-date-picker>
</el-form-item>
#elseif($column.isDatetime() && $column.isBetween())
<el-form-item label="${comment}">
<el-date-picker
v-model="daterange${column.getAttrName()}"
size="small"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
#end
#end
#end
<el-form-item>
<el-button type="primary" @click="handleSearch()" :icon="Search">搜索</el-button>
<el-button @click="handleReset" :icon="Refresh">重置</el-button>
</el-form-item>
</el-form>
<div class="query-btn">
<el-button type="primary" v-perm="['${permissionPrefix}:add']" @click="handleAdd" :icon="Plus" plain>新增</el-button>
<el-button type="danger" v-perm="['${permissionPrefix}:del']" @click="handleDelete" :icon="Delete" plain :disabled="disabled">删除</el-button>
<el-button type="warning" v-perm="['${permissionPrefix}:export']" @click="handleExport" :icon="Download" plain>导出</el-button>
</div>
<div class="table">
<el-table
:data="list"
row-key="${pkColumn.javaField}"
:lazy="true"
ref="singleTable"
v-loading="loading"
@select="handleSelect"
>
<el-table-column type="selection" width="55"/>
<el-table-column label="序号" type="index" class-name="allowDrag"/>
#foreach($column in $columns)
#if($column.list())
#set($comment=$column.comment())
#if($column.listAndDict())
<el-table-column prop="${column.javaField}" label="${comment}" align="center">
<template #default="scope">
<tag dict-type="${column.dictType}" :value="scope.row.${column.javaField}"/>
</template>
</el-table-column>
#else
<el-table-column prop="${column.javaField}" label="${comment}" align="center"/>
#end
#end
#end
<el-table-column label="操作">
<template #default="scope">
<el-button type="text" size="mini" v-perm="['${permissionPrefix}:edit']"
@click="handleEdit(scope.row.${pkColumn.javaField})" :icon="Edit">编辑
</el-button>
<el-button type="text" size="mini" v-perm="['${permissionPrefix}:del']" @click="handleDelete(scope.row)"
:icon="Delete">删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<el-config-provider>
<el-pagination
v-model:current-page="pageInfo.pageNum"
v-model:page-size="pageInfo.pageSize"
:page-sizes="[10, 20, 30, 40,50]"
:background="true"
layout="->,total, sizes, prev, pager, next, jumper"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</el-config-provider>
<el-dialog v-model="isVisited" :title="title" width="900px">
<el-form :model="form" ref="formInstance" :rules="formRules" label-width="100px" class="dialog-form">
<el-row>
#foreach($column in $columns)
#if($column.from())
#set($comment=$column.comment())
#if($velocityCount % 2 == 1)
<el-col :span="11" :offset="2">
#else
<el-col :span="11">
#end
#if($column.isInput())
<el-form-item label="${comment}" prop="${column.javaField}">
<el-input v-model="form.${column.javaField}" placeholder="请输入${comment}"></el-input>
</el-form-item>
#elseif($column.isSelect() && $column.isDict())
<el-form-item label="${comment}" prop="${column.javaField}">
<el-select v-model="form.${column.javaField}" placeholder="请选择${comment}" clearable >
<el-option
v-for="dict in cacheStore.getDict('${column.dictType}')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
#elseif($column.isSelect() && !$column.isDict())
<el-form-item label="${comment}" prop="${column.javaField}">
<el-select v-model="form.${column.javaField}" placeholder="请选择${comment}">
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
#end
</el-col>
#end
#end
</el-row>
</el-form>
<template #footer>
<span>
<el-button @click="handleCancel">取消</el-button>
<el-button type="primary" @click="handleSubmit(formInstance)">确定</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup>
import { get${ClassName}List, get${ClassName}Details, add${ClassName}, edit${ClassName}, del${ClassName} } from "@/api/${moduleName}/${businessName}";
import {Search, Refresh, Delete, Plus, Edit, Download} from '@element-plus/icons-vue'
import {ElMessage, ElMessageBox} from "element-plus";
#if($table.hasDictSelect())
import { useCacheStore } from '@/stores/cache.js'
const cacheStore = useCacheStore()
cacheStore.setCacheKey([${table.getDictType()}])
#end
#if($table.hasListAndDict())
import Tag from '@/components/Tag.vue'
#end
import {downLoadExcel} from "@/utils/downloadZip";
//查询参数
const queryParams = reactive({
#foreach ($column in $columns)
#if($column.query())
$column.javaField:#if("String" == $column.javaType) ''#else undefined#end,
#end
#end
})
//页面信息
const pageInfo = reactive({
pageNum: 1,
pageSize: 10,
})
const disabled = ref(true)
const list = ref([])
const queryForm = ref([])
const loading = ref(true)
const total = ref()
const title = ref('')
const isVisited = ref(false)
const form = ref()
const formInstance = ref()
const formRules = ref({
#foreach ($column in $columns)
#if($column.required())
#set($comment=$column.comment())
$column.javaField: [
{ required: true, message: "${comment}不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end },
#if($column.isRegular != 1)
{ pattern: /${column.regular}/, message: '${column.columnComment}格式有误', trigger:"blur"},
#end
]#if($velocityCount != $columns.size()),#end
#end
#end
})
//搜索功能
const handleSearch = () => {
getList()
}
//重置搜索
const handleReset = () => {
queryForm.value.resetFields()
getList()
}
//获取数据
const getList = async () => {
let params = {
...queryParams,
...pageInfo
}
get${ClassName}List(params).then(res => {
if (res.code === 1000) {
list.value = res.data.rows
total.value = res.data.total
loading.value = false
} else {
ElMessage.error(res.msg)
}
})
}
//重置from表单
const restFrom = () => {
form.value = {
#foreach ($column in $columns)
#if($column.from())
#if($column.fromValue())
#if($column.isRadio())
$column.javaField: ${column.getDefaultRadio()}#if($velocityCount != $columns.size()),#end
#elseif($column.isCheckbox())
$column.javaField: []#if($velocityCount != $columns.size()),#end
#else
$column.javaField: null#if($velocityCount != $columns.size()),#end
#end
#end
#end
#end
}
}
//取消
const handleCancel = () => {
restFrom()
isVisited.value = false
}
//提交
const handleSubmit = async (instance) => {
if (!instance) return
instance.validate(async (valid) => {
if (!valid) return
if (title.value === '新增${functionName}') {
add${ClassName}(form.value).then(res => {
if (res.code === 1000) {
ElMessage.success(res.msg)
getList()
isVisited.value = false
} else {
ElMessage.error(res.msg)
}
})
} else {
edit${ClassName}(form.value).then(res => {
if (res.code === 1000) {
ElMessage.success(res.msg)
getList()
isVisited.value = false
} else {
ElMessage.error(res.msg)
}
})
}
})
}
//添加
const handleAdd = async () => {
restFrom()
title.value = "新增${functionName}"
isVisited.value = true
}
//修改
const handleEdit = async (${pkColumn.javaField}) => {
restFrom()
get${ClassName}Details(${pkColumn.javaField}).then(res => {
if (res.code === 1000) {
form.value = res.data
title.value = "编辑${functionName}"
isVisited.value = true
} else {
ElMessage.error(res.msg)
}
})
}
//导出excel
const handleExport = () => {
downLoadExcel('/${serviceName}/${moduleName}/${businessName}/export',{...queryParams})
}
//勾选table数据行的 Checkbox
const handleSelect = async (selection, row) => {
if (selection.length !== 0) {
disabled.value = false
${pkColumn.javaField}.value = row.${pkColumn.javaField}
if (selection.length > 1) {
const del_row = selection.shift();
singleTable.value.toggleRowSelection(del_row, false);
}
} else {
disabled.value = true
}
}
//切换每页显示条数
const handleSizeChange = async (val) => {
pageInfo.value.pageSize = val
await getList()
}
//点击页码进行分页功能
const handleCurrentChange = async (val) => {
pageInfo.value.pageNum = val
await getList()
}
//删除
const handleDelete = async ({dsName, ${pkColumn.javaField}}) => {
ElMessageBox.confirm(`确认删除名称为${dsName}的${functionName}吗?`, '系统提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
del${ClassName}(${pkColumn.javaField}).then(res => {
if (res.code === 1000) {
ElMessage.success(res.msg)
getList()
} else {
ElMessage.error(res.msg)
}
})
})
}
getList()
</script>

View File

@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${packageName}.mapper.${ClassName}Mapper">
<resultMap id="${className}Result" type="${packageName}.entity.${ClassName}">
<id column="${pkColumn.columnName}" property="${pkColumn.javaField}"/>
#foreach($column in $columns)
#if("1" != $column.isPk)
<result column="${column.columnName}" property="${column.javaField}"/>
#end
#end
</resultMap>
<sql id="selectVo">
select #foreach($column in $columns)${column.columnName}#if($velocityCount != $columns.size()), #end
#end
from ${tableName}
</sql>
<select id="selectList" resultMap="${className}Result">
<include refid="selectVo"/>
<where>
#foreach($column in $columns)
#set($queryType=$column.queryType)
#set($javaField=$column.javaField)
#set($javaType=$column.javaType)
#set($columnName=$column.columnName)
#if("1" == $column.isQuery)
#if($column.queryType == "EQ")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName = #{$javaField}</if>
#elseif($queryType == "NE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName != #{$javaField}</if>
#elseif($queryType == "GT")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt; #{$javaField}</if>
#elseif($queryType == "GTE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt;= #{$javaField}</if>
#elseif($queryType == "LT")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt; #{$javaField}</if>
#elseif($queryType == "LTE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt;= #{$javaField}</if>
#elseif($queryType == "LIKE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat('%', #{$javaField}, '%')</if>
#elseif($queryType == "BETWEEN")
#set($AttrName=${table.capitalize($javaField)})
<if test="begin${AttrName} != null and end${AttrName} != null"> and $columnName between #{begin${AttrName}} and #{end${AttrName}}</if>
#end
#end
#end
</where>
</select>
<select id="selectById" resultMap="${className}Result">
<include refid="selectVo"/>
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</select>
<insert id="insert" #if($pkColumn.increment)useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
insert into ${tableName}
<trim prefix="(" suffix=")" suffixOverrides=",">
#foreach($column in $columns)
#if(!$column.isSuperColumn($column.javaField))
#if(($column.columnName != $pkColumn.columnName || !$pkColumn.increment) && $column.isInsert == 1)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName,</if>
#end
#end
#end
#if($table.hasCreateXMLColumns())
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null ">create_time,</if>
#end
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#foreach($column in $columns)
#if(!$column.isSuperColumn($column.javaField))
#if(($column.columnName != $pkColumn.columnName || !$pkColumn.increment) && $column.isInsert == 1)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">#{$column.javaField},</if>
#end
#end
#end
#if($table.hasCreateXMLColumns())
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null ">#{createTime},</if>
#end
</trim>
</insert>
<update id="update">
update ${tableName}
<set>
#foreach($column in $columns)
#if(!$column.isSuperColumn($column.javaField))
#if(($column.columnName != $pkColumn.columnName || !$pkColumn.increment) && $column.isInsert == 1)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName = #{$column.javaField},</if>
#end
#end
#end
#if($table.hasUpdateXMLColumns())
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="updateTime != null ">update_time = #{updateTime},</if>
#end
</set>
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</update>
<delete id="deleteById">
delete from ${tableName}
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</delete>
<delete id="deleteBatchByIdList" parameterType="${pkColumn.javaType}">
delete from ${tableName}
where ${pkColumn.columnName} in
<foreach collection="list" open="(" close=")" separator="," item="${pkColumn.javaField}">
#{${pkColumn.javaField}}
</foreach>
</delete>
</mapper>

View File

@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${packageName}.mapper.${ClassName}Mapper">
<resultMap id="${className}Result" type="${packageName}.entity.${ClassName}">
<id column="${pkColumn.columnName}" property="${pkColumn.javaField}"/>
#foreach($column in $columns)
#if("1" != $column.isPk)
<result column="${column.columnName}" property="${column.javaField}"/>
#end
#end
</resultMap>
<sql id="selectVo">
select #foreach($column in $columns)${column.columnName}#if($velocityCount != $columns.size()), #end
#end
from ${tableName}
</sql>
<select id="selectList" resultMap="${className}Result">
<include refid="selectVo"/>
<where>
#foreach($column in $columns)
#set($queryType=$column.queryType)
#set($javaField=$column.javaField)
#set($javaType=$column.javaType)
#set($columnName=$column.columnName)
#if("1" == $column.isQuery)
#if($column.queryType == "EQ")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName = #{$javaField}</if>
#elseif($queryType == "NE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName != #{$javaField}</if>
#elseif($queryType == "GT")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt; #{$javaField}</if>
#elseif($queryType == "GTE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt;= #{$javaField}</if>
#elseif($queryType == "LT")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt; #{$javaField}</if>
#elseif($queryType == "LTE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt;= #{$javaField}</if>
#elseif($queryType == "LIKE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat(concat('%', #{$javaField}),'%')</if>
#elseif($queryType == "BETWEEN")
#set($AttrName=${table.capitalize($javaField)})
<if test="begin${AttrName} != null and end${AttrName} != null"> and $columnName between #{begin${AttrName}} and #{end${AttrName}}</if>
#end
#end
#end
</where>
</select>
<select id="selectById" resultMap="${className}Result">
<include refid="selectVo"/>
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</select>
<insert id="insert${ClassName}" #if($pkColumn.increment)useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
insert into ${tableName}
<trim prefix="(" suffix=")" suffixOverrides=",">
#foreach($column in $columns)
#if(!$column.isSuperColumn($column.javaField))
#if(($column.columnName != $pkColumn.columnName || !$pkColumn.increment) && $column.isInsert == 1)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName,</if>
#end
#end
#end
#if($table.hasCreateXMLColumns())
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null ">create_time,</if>
#end
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#foreach($column in $columns)
#if(!$column.isSuperColumn($column.javaField))
#if(($column.columnName != $pkColumn.columnName || !$pkColumn.increment) && $column.isInsert == 1)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">#{$column.javaField},</if>
#end
#end
#end
#if($table.hasCreateXMLColumns())
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null ">#{createTime},</if>
#end
</trim>
</insert>
<update id="update">
update ${tableName}
<set>
#foreach($column in $columns)
#if(!$column.isSuperColumn($column.javaField))
#if(($column.columnName != $pkColumn.columnName || !$pkColumn.increment) && $column.isInsert == 1)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName = #{$column.javaField},</if>
#end
#end
#end
#if($table.hasUpdateXMLColumns())
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="updateTime != null ">update_time = #{updateTime},</if>
#end
</set>
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</update>
<delete id="deleteById">
delete from ${tableName}
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</delete>
<delete id="deleteBatchByIdList" parameterType="${pkColumn.javaType}">
delete from ${tableName}
where ${pkColumn.columnName} in
<foreach collection="list" open="(" close=")" separator="," item="${pkColumn.javaField}">
#{${pkColumn.javaField}}
</foreach>
</delete>
</mapper>