codes) {
- return CollectionUtils.convertList(codes.entrySet(),
- entry -> new CodegenPreviewRespVO().setFilePath(entry.getKey()).setCode(entry.getValue()));
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/codegen/CodegenColumnDO.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/codegen/CodegenColumnDO.java
deleted file mode 100644
index 8a75cb1..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/codegen/CodegenColumnDO.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.njcn.rdms.module.system.dal.dataobject.codegen;
-
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.generator.config.po.TableField;
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-import com.njcn.rdms.module.system.enums.codegen.CodegenColumnHtmlTypeEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenColumnListConditionEnum;
-import lombok.Data;
-
-/**
- * 代码生成 column 字段定义
- *
- * @author hongawen
- */
-@TableName(value = "infra_codegen_column", autoResultMap = true)
-@KeySequence("infra_codegen_column_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-
-public class CodegenColumnDO extends BaseDO {
-
- /**
- * ID 编号
- */
- @TableId
- private Long id;
- /**
- * 表编号
- *
- * 关联 {@link CodegenTableDO#getId()}
- */
- private Long tableId;
-
- // ========== 表相关字段 ==========
-
- /**
- * 字段名
- *
- * 关联 {@link TableField#getName()}
- */
- private String columnName;
- /**
- * 数据库字段类型
- *
- * 关联 {@link TableField.MetaInfo#getJdbcType()}
- */
- private String dataType;
- /**
- * 字段描述
- *
- * 关联 {@link TableField#getComment()}
- */
- private String columnComment;
- /**
- * 是否允许为空
- *
- * 关联 {@link TableField.MetaInfo#isNullable()}
- */
- private Boolean nullable;
- /**
- * 是否主键
- *
- * 关联 {@link TableField#isKeyFlag()}
- */
- private Boolean primaryKey;
- /**
- * 排序
- */
- private Integer ordinalPosition;
-
- // ========== Java 相关字段 ==========
-
- /**
- * Java 属性类型
- *
- * 例如说 String、Boolean 等等
- *
- * 关联 {@link TableField#getColumnType()}
- */
- private String javaType;
- /**
- * Java 属性名
- *
- * 关联 {@link TableField#getPropertyName()}
- */
- private String javaField;
- /**
- * 字典类型
- *
- * 关联 DictTypeDO 的 type 属性
- */
- private String dictType;
- /**
- * 数据示例,主要用于生成 Swagger 注解的 example 字段
- */
- private String example;
-
- // ========== CRUD 相关字段 ==========
-
- /**
- * 是否为 Create 创建操作的字段
- */
- private Boolean createOperation;
- /**
- * 是否为 Update 更新操作的字段
- */
- private Boolean updateOperation;
- /**
- * 是否为 List 查询操作的字段
- */
- private Boolean listOperation;
- /**
- * List 查询操作的条件类型
- *
- * 枚举 {@link CodegenColumnListConditionEnum}
- */
- private String listOperationCondition;
- /**
- * 是否为 List 查询操作的返回字段
- */
- private Boolean listOperationResult;
-
- // ========== UI 相关字段 ==========
-
- /**
- * 显示类型
- *
- * 枚举 {@link CodegenColumnHtmlTypeEnum}
- */
- private String htmlType;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/codegen/CodegenTableDO.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/codegen/CodegenTableDO.java
deleted file mode 100644
index 447ead0..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/codegen/CodegenTableDO.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package com.njcn.rdms.module.system.dal.dataobject.codegen;
-
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.generator.config.po.TableInfo;
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-import com.njcn.rdms.module.system.dal.dataobject.db.DataSourceConfigDO;
-import com.njcn.rdms.module.system.enums.codegen.CodegenFrontTypeEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenSceneEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenTemplateTypeEnum;
-import lombok.Data;
-
-/**
- * 代码生成 table 表定义
- *
- * @author hongawen
- */
-@TableName(value = "infra_codegen_table", autoResultMap = true)
-@KeySequence("infra_codegen_table_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-
-public class CodegenTableDO extends BaseDO {
-
- /**
- * ID 编号
- */
- @TableId
- private Long id;
-
- /**
- * 数据源编号
- *
- * 关联 {@link DataSourceConfigDO#getId()}
- */
- private Long dataSourceConfigId;
- /**
- * 生成场景
- *
- * 枚举 {@link CodegenSceneEnum}
- */
- private Integer scene;
-
- // ========== 表相关字段 ==========
-
- /**
- * 表名称
- *
- * 关联 {@link TableInfo#getName()}
- */
- private String tableName;
- /**
- * 表描述
- *
- * 关联 {@link TableInfo#getComment()}
- */
- private String tableComment;
- /**
- * 备注
- */
- private String remark;
-
- // ========== 类相关字段 ==========
-
- /**
- * 模块名,即一级目录
- *
- * 例如说,system、infra、tool 等等
- */
- private String moduleName;
- /**
- * 业务名,即二级目录
- *
- * 例如说,user、permission、dict 等等
- */
- private String businessName;
- /**
- * 类名称(首字母大写)
- *
- * 例如说,SysUser、SysMenu、SysDictData 等等
- */
- private String className;
- /**
- * 类描述
- */
- private String classComment;
- /**
- * 作者
- */
- private String author;
-
- // ========== 生成相关字段 ==========
-
- /**
- * 模板类型
- *
- * 枚举 {@link CodegenTemplateTypeEnum}
- */
- private Integer templateType;
- /**
- * 代码生成的前端类型
- *
- * 枚举 {@link CodegenFrontTypeEnum}
- */
- private Integer frontType;
-
- // ========== 菜单相关字段 ==========
-
- /**
- * 父菜单编号
- *
- * 关联 MenuDO 的 id 属性
- */
- private Long parentMenuId;
-
- // ========== 主子表相关字段 ==========
-
- /**
- * 主表的编号
- *
- * 关联 {@link CodegenTableDO#getId()}
- */
- private Long masterTableId;
- /**
- * 【自己】子表关联主表的字段编号
- *
- * 关联 {@link CodegenColumnDO#getId()}
- */
- private Long subJoinColumnId;
- /**
- * 主表与子表是否一对多
- *
- * true:一对多
- * false:一对一
- */
- private Boolean subJoinMany;
-
- // ========== 树表相关字段 ==========
-
- /**
- * 树表的父字段编号
- *
- * 关联 {@link CodegenColumnDO#getId()}
- */
- private Long treeParentColumnId;
- /**
- * 树表的名字字段编号
- *
- * 名字的用途:新增或修改时,select 框展示的字段
- *
- * 关联 {@link CodegenColumnDO#getId()}
- */
- private Long treeNameColumnId;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/db/DataSourceConfigDO.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/db/DataSourceConfigDO.java
deleted file mode 100644
index 59b79e1..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/db/DataSourceConfigDO.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.njcn.rdms.module.system.dal.dataobject.db;
-
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-import com.njcn.rdms.framework.mybatis.core.type.EncryptTypeHandler;
-import lombok.Data;
-
-/**
- * 数据源配置
- *
- * @author hongawen
- */
-@TableName(value = "infra_data_source_config", autoResultMap = true)
-@KeySequence("infra_data_source_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-
-public class DataSourceConfigDO extends BaseDO {
-
- /**
- * 主键编号 - Master 数据源
- */
- public static final Long ID_MASTER = 0L;
-
- /**
- * 主键编号
- */
- private Long id;
- /**
- * 连接名
- */
- private String name;
-
- /**
- * 数据源连接
- */
- private String url;
- /**
- * 用户名
- */
- private String username;
- /**
- * 密码
- */
- @TableField(typeHandler = EncryptTypeHandler.class)
- private String password;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailAccountDO.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailAccountDO.java
deleted file mode 100644
index 6f2c673..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailAccountDO.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.njcn.rdms.module.system.dal.dataobject.mail;
-
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 邮箱账号 DO
- *
- * 用途:配置发送邮箱的账号
- *
- * @author hongawen
- *
- */
-@TableName(value = "system_mail_account", autoResultMap = true)
-@KeySequence("system_mail_account_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-
-public class MailAccountDO extends BaseDO {
-
- /**
- * 主键
- */
- @TableId
- private Long id;
- /**
- * 邮箱
- */
- private String mail;
-
- /**
- * 用户名
- */
- private String username;
- /**
- * 密码
- */
- private String password;
- /**
- * SMTP 服务器域名
- */
- private String host;
- /**
- * SMTP 服务器端口
- */
- private Integer port;
- /**
- * 是否开启 SSL
- */
- private Boolean sslEnable;
- /**
- * 是否开启 STARTTLS
- */
- private Boolean starttlsEnable;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailLogDO.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailLogDO.java
deleted file mode 100644
index 34dc5d9..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailLogDO.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package com.njcn.rdms.module.system.dal.dataobject.mail;
-
-import com.njcn.rdms.framework.common.enums.UserTypeEnum;
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-import com.njcn.rdms.framework.mybatis.core.type.StringListTypeHandler;
-
-import com.njcn.rdms.module.system.enums.mail.MailSendStatusEnum;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.*;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 邮箱日志 DO
- * 记录每一次邮件的发送
- *
- * @author hongawen
- *
- */
-@TableName(value = "system_mail_log", autoResultMap = true)
-@KeySequence("system_mail_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-
-public class MailLogDO extends BaseDO implements Serializable {
-
- /**
- * 日志编号,自增
- */
- private Long id;
-
- /**
- * 用户编码
- */
- private Long userId;
- /**
- * 用户类型
- *
- * 枚举 {@link UserTypeEnum}
- */
- private Integer userType;
-
- /**
- * 接收邮箱地址
- */
- @TableField(typeHandler = StringListTypeHandler.class)
- private List toMails;
- /**
- * 接收邮箱地址
- */
- @TableField(typeHandler = StringListTypeHandler.class)
- private List ccMails;
- /**
- * 密送邮箱地址
- */
- @TableField(typeHandler = StringListTypeHandler.class)
- private List bccMails;
-
- /**
- * 邮箱账号编号
- *
- * 关联 {@link MailAccountDO#getId()}
- */
- private Long accountId;
- /**
- * 发送邮箱地址
- *
- * 冗余 {@link MailAccountDO#getMail()}
- */
- private String fromMail;
-
- // ========= 模板相关字段 =========
- /**
- * 模版编号
- *
- * 关联 {@link MailTemplateDO#getId()}
- */
- private Long templateId;
- /**
- * 模版编码
- *
- * 冗余 {@link MailTemplateDO#getCode()}
- */
- private String templateCode;
- /**
- * 模版发送人名称
- *
- * 冗余 {@link MailTemplateDO#getNickname()}
- */
- private String templateNickname;
- /**
- * 模版标题
- */
- private String templateTitle;
- /**
- * 模版内容
- *
- * 基于 {@link MailTemplateDO#getContent()} 格式化后的内容
- */
- private String templateContent;
- /**
- * 模版参数
- *
- * 基于 {@link MailTemplateDO#getParams()} 输入后的参数
- */
- @TableField(typeHandler = JacksonTypeHandler.class)
- private Map templateParams;
-
- // ========= 发送相关字段 =========
- /**
- * 发送状态
- *
- * 枚举 {@link MailSendStatusEnum}
- */
- private Integer sendStatus;
- /**
- * 发送时间
- */
- private LocalDateTime sendTime;
- /**
- * 发送返回的消息 ID
- */
- private String sendMessageId;
- /**
- * 发送异常
- */
- private String sendException;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailTemplateDO.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailTemplateDO.java
deleted file mode 100644
index cfe3b63..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/mail/MailTemplateDO.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.njcn.rdms.module.system.dal.dataobject.mail;
-
-import com.njcn.rdms.framework.common.enums.CommonStatusEnum;
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.List;
-
-/**
- * 邮件模版 DO
- *
- * @author hongawen
- *
- */
-@TableName(value = "system_mail_template", autoResultMap = true)
-@KeySequence("system_mail_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
-@Data
-@EqualsAndHashCode(callSuper = true)
-
-public class MailTemplateDO extends BaseDO {
-
- /**
- * 主键
- */
- private Long id;
- /**
- * 模版名称
- */
- private String name;
- /**
- * 模版编号
- */
- private String code;
- /**
- * 发送的邮箱账号编号
- *
- * 关联 {@link MailAccountDO#getId()}
- */
- private Long accountId;
-
- /**
- * 发送人名称
- */
- private String nickname;
- /**
- * 标题
- */
- private String title;
- /**
- * 内容
- */
- private String content;
- /**
- * 参数数组(自动根据内容生成)
- */
- @TableField(typeHandler = JacksonTypeHandler.class)
- private List params;
- /**
- * 状态
- *
- * 枚举 {@link CommonStatusEnum}
- */
- private Integer status;
- /**
- * 备注
- */
- private String remark;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/social/SocialClientDO.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/social/SocialClientDO.java
deleted file mode 100644
index e473d7e..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/dataobject/social/SocialClientDO.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.njcn.rdms.module.system.dal.dataobject.social;
-
-import com.njcn.rdms.framework.common.enums.CommonStatusEnum;
-import com.njcn.rdms.framework.common.enums.UserTypeEnum;
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.*;
-
-/**
- * 社交客户端 DO
- *
- * @author hongawen
- */
-@TableName(value = "system_social_client", autoResultMap = true)
-@KeySequence("system_social_client_seq")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class SocialClientDO extends BaseDO {
-
- @TableId
- private Long id;
- /** 应用名 */
- private String name;
- /**
- * 社交类型
- *
- * 枚举 {@link UserTypeEnum}
- */
- private Integer socialType;
- /**
- * 用户类型
- *
- * 枚举 {@link UserTypeEnum}
- */
- private Integer userType;
- /**
- * 状态
- *
- * 枚举 {@link CommonStatusEnum}
- */
- private Integer status;
- /** 客户端 id */
- private String clientId;
- /** 客户端 Secret */
- private String clientSecret;
- /** 代理编号 */
- private String agentId;
- /** publicKey 公钥 */
- private String publicKey;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/codegen/CodegenColumnMapper.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/codegen/CodegenColumnMapper.java
deleted file mode 100644
index e2cb407..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/codegen/CodegenColumnMapper.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.njcn.rdms.module.system.dal.mysql.codegen;
-
-import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
-import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenColumnDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.Collection;
-import java.util.List;
-
-@Mapper
-public interface CodegenColumnMapper extends BaseMapperX {
-
- default List selectListByTableId(Long tableId) {
- return selectList(new LambdaQueryWrapperX()
- .eq(CodegenColumnDO::getTableId, tableId)
- .orderByAsc(CodegenColumnDO::getOrdinalPosition));
- }
-
- default void deleteListByTableId(Long tableId) {
- delete(CodegenColumnDO::getTableId, tableId);
- }
-
- default void deleteListByTableId(Collection tableIds) {
- delete(new LambdaQueryWrapperX()
- .in(CodegenColumnDO::getTableId, tableIds));
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/codegen/CodegenTableMapper.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/codegen/CodegenTableMapper.java
deleted file mode 100644
index 62410eb..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/codegen/CodegenTableMapper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.njcn.rdms.module.system.dal.mysql.codegen;
-
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
-import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.table.CodegenTablePageReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenTableDO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-
-@Mapper
-public interface CodegenTableMapper extends BaseMapperX {
-
- default CodegenTableDO selectByTableNameAndDataSourceConfigId(String tableName, Long dataSourceConfigId) {
- return selectOne(CodegenTableDO::getTableName, tableName,
- CodegenTableDO::getDataSourceConfigId, dataSourceConfigId);
- }
-
- default PageResult selectPage(CodegenTablePageReqVO pageReqVO) {
- return selectPage(pageReqVO, new LambdaQueryWrapperX()
- .likeIfPresent(CodegenTableDO::getTableName, pageReqVO.getTableName())
- .likeIfPresent(CodegenTableDO::getTableComment, pageReqVO.getTableComment())
- .likeIfPresent(CodegenTableDO::getClassName, pageReqVO.getClassName())
- .betweenIfPresent(CodegenTableDO::getCreateTime, pageReqVO.getCreateTime())
- .orderByDesc(CodegenTableDO::getUpdateTime)
- );
- }
-
- default List selectListByDataSourceConfigId(Long dataSourceConfigId) {
- return selectList(CodegenTableDO::getDataSourceConfigId, dataSourceConfigId);
- }
-
- default List selectListByTemplateTypeAndMasterTableId(Integer templateType, Long masterTableId) {
- return selectList(CodegenTableDO::getTemplateType, templateType,
- CodegenTableDO::getMasterTableId, masterTableId);
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/db/DataSourceConfigMapper.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/db/DataSourceConfigMapper.java
deleted file mode 100644
index d2e2045..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/db/DataSourceConfigMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.njcn.rdms.module.system.dal.mysql.db;
-
-import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
-import com.njcn.rdms.module.system.dal.dataobject.db.DataSourceConfigDO;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 数据源配置 Mapper
- *
- * @author hongawen
- */
-@Mapper
-public interface DataSourceConfigMapper extends BaseMapperX {
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailAccountMapper.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailAccountMapper.java
deleted file mode 100644
index ae03b30..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailAccountMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.njcn.rdms.module.system.dal.mysql.mail;
-
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
-import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.njcn.rdms.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.mail.MailAccountDO;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface MailAccountMapper extends BaseMapperX {
-
- default PageResult selectPage(MailAccountPageReqVO pageReqVO) {
- return selectPage(pageReqVO, new LambdaQueryWrapperX()
- .likeIfPresent(MailAccountDO::getMail, pageReqVO.getMail())
- .likeIfPresent(MailAccountDO::getUsername , pageReqVO.getUsername())
- .orderByDesc(MailAccountDO::getId));
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailLogMapper.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailLogMapper.java
deleted file mode 100644
index f09ffb3..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailLogMapper.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.njcn.rdms.module.system.dal.mysql.mail;
-
-import cn.hutool.core.util.StrUtil;
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
-import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.njcn.rdms.framework.mybatis.core.util.MyBatisUtils;
-import com.njcn.rdms.module.system.controller.admin.mail.vo.log.MailLogPageReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.mail.MailLogDO;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface MailLogMapper extends BaseMapperX {
-
- default PageResult selectPage(MailLogPageReqVO reqVO) {
- return selectPage(reqVO, new LambdaQueryWrapperX()
- .eqIfPresent(MailLogDO::getUserId, reqVO.getUserId())
- .eqIfPresent(MailLogDO::getUserType, reqVO.getUserType())
- .eqIfPresent(MailLogDO::getAccountId, reqVO.getAccountId())
- .eqIfPresent(MailLogDO::getTemplateId, reqVO.getTemplateId())
- .eqIfPresent(MailLogDO::getSendStatus, reqVO.getSendStatus())
- .betweenIfPresent(MailLogDO::getSendTime, reqVO.getSendTime())
- .apply(StrUtil.isNotBlank(reqVO.getToMail()),
- MyBatisUtils.findInSet("to_mails", reqVO.getToMail()))
- .orderByDesc(MailLogDO::getId));
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailTemplateMapper.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailTemplateMapper.java
deleted file mode 100644
index 9699e7c..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/mail/MailTemplateMapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.njcn.rdms.module.system.dal.mysql.mail;
-
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
-import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.njcn.rdms.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.mail.MailTemplateDO;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface MailTemplateMapper extends BaseMapperX {
-
- default PageResult selectPage(MailTemplatePageReqVO pageReqVO){
- return selectPage(pageReqVO , new LambdaQueryWrapperX()
- .eqIfPresent(MailTemplateDO::getStatus, pageReqVO.getStatus())
- .likeIfPresent(MailTemplateDO::getCode, pageReqVO.getCode())
- .likeIfPresent(MailTemplateDO::getName, pageReqVO.getName())
- .eqIfPresent(MailTemplateDO::getAccountId, pageReqVO.getAccountId())
- .betweenIfPresent(MailTemplateDO::getCreateTime, pageReqVO.getCreateTime())
- .orderByDesc(MailTemplateDO::getId));
- }
-
- default Long selectCountByAccountId(Long accountId) {
- return selectCount(MailTemplateDO::getAccountId, accountId);
- }
-
- default MailTemplateDO selectByCode(String code) {
- return selectOne(MailTemplateDO::getCode, code);
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/social/SocialClientMapper.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/social/SocialClientMapper.java
deleted file mode 100644
index 3f05fe0..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/mysql/social/SocialClientMapper.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.njcn.rdms.module.system.dal.mysql.social;
-
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
-import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.njcn.rdms.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.social.SocialClientDO;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface SocialClientMapper extends BaseMapperX {
-
- default SocialClientDO selectBySocialTypeAndUserType(Integer socialType, Integer userType) {
- return selectOne(SocialClientDO::getSocialType, socialType,
- SocialClientDO::getUserType, userType);
- }
-
- default PageResult selectPage(SocialClientPageReqVO reqVO) {
- return selectPage(reqVO, new LambdaQueryWrapperX()
- .likeIfPresent(SocialClientDO::getName, reqVO.getName())
- .eqIfPresent(SocialClientDO::getSocialType, reqVO.getSocialType())
- .eqIfPresent(SocialClientDO::getUserType, reqVO.getUserType())
- .likeIfPresent(SocialClientDO::getClientId, reqVO.getClientId())
- .eqIfPresent(SocialClientDO::getStatus, reqVO.getStatus())
- .orderByDesc(SocialClientDO::getId));
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/redis/RedisKeyConstants.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/redis/RedisKeyConstants.java
index d0034b2..2a69066 100644
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/redis/RedisKeyConstants.java
+++ b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/dal/redis/RedisKeyConstants.java
@@ -27,8 +27,4 @@ public interface RedisKeyConstants {
String NOTIFY_TEMPLATE = "notify_template";
- String MAIL_ACCOUNT = "mail_account";
-
- String MAIL_TEMPLATE = "mail_template";
-
}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/config/CodegenConfiguration.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/config/CodegenConfiguration.java
deleted file mode 100644
index 16df98f..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/config/CodegenConfiguration.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.njcn.rdms.module.system.framework.codegen.config;
-
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration(proxyBeanMethods = false)
-@EnableConfigurationProperties(CodegenProperties.class)
-public class CodegenConfiguration {
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/config/CodegenProperties.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/config/CodegenProperties.java
deleted file mode 100644
index 9215310..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/config/CodegenProperties.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.njcn.rdms.module.system.framework.codegen.config;
-
-import com.njcn.rdms.module.system.enums.codegen.CodegenFrontTypeEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenVOTypeEnum;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.validation.annotation.Validated;
-
-import java.util.Collection;
-
-@ConfigurationProperties(prefix = "rdms.codegen")
-@Validated
-@Data
-public class CodegenProperties {
-
- /**
- * 生成的 Java 代码的基础包
- */
- @NotNull(message = "Java 代码的基础包不能为空")
- private String basePackage;
-
- /**
- * 数据库名数组
- */
- @NotEmpty(message = "数据库不能为空")
- private Collection dbSchemas;
-
- /**
- * 代码生成的前端类型(默认)
- *
- * 枚举 {@link CodegenFrontTypeEnum#getType()}
- */
- @NotNull(message = "代码生成的前端类型不能为空")
- private Integer frontType;
-
- /**
- * 代码生成的 VO 类型
- *
- * 枚举 {@link CodegenVOTypeEnum#getType()}
- */
- @NotNull(message = "代码生成的 VO 类型不能为空")
- private Integer voType;
-
- /**
- * 是否生成批量删除接口
- */
- @NotNull(message = "是否生成批量删除接口不能为空")
- private Boolean deleteBatchEnable;
-
- /**
- * 是否生成单元测试
- */
- @NotNull(message = "是否生成单元测试不能为空")
- private Boolean unitTestEnable;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/package-info.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/package-info.java
deleted file mode 100644
index e23ad88..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/codegen/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * 代码生成器
- */
-package com.njcn.rdms.module.system.framework.codegen;
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/file/core/client/AbstractFileClient.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/file/core/client/AbstractFileClient.java
index e5d6e15..6925151 100644
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/file/core/client/AbstractFileClient.java
+++ b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/framework/file/core/client/AbstractFileClient.java
@@ -72,7 +72,8 @@ public abstract class AbstractFileClient implem
* @return URL 访问地址
*/
protected String formatFileUrl(String domain, String path) {
- return StrUtil.format("{}/admin-api/infra/file/{}/get/{}", domain, getId(), path);
+ return StrUtil.format("{}/admin-api/system/file/{}/get/{}", domain, getId(), path);
}
}
+
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/consumer/mail/MailSendConsumer.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/consumer/mail/MailSendConsumer.java
deleted file mode 100644
index 49053ca..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/consumer/mail/MailSendConsumer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.njcn.rdms.module.system.mq.consumer.mail;
-
-import com.njcn.rdms.module.system.mq.message.mail.MailSendMessage;
-import com.njcn.rdms.module.system.service.mail.MailSendService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Component;
-
-import jakarta.annotation.Resource;
-
-/**
- * 针对 {@link MailSendMessage} 的消费者
- *
- * @author hongawen
- */
-@Component
-@Slf4j
-public class MailSendConsumer {
-
- @Resource
- private MailSendService mailSendService;
-
- @EventListener
- @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
- public void onMessage(MailSendMessage message) {
- log.info("[onMessage][消息内容({})]", message);
- mailSendService.doSendMail(message);
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/message/mail/MailSendMessage.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/message/mail/MailSendMessage.java
deleted file mode 100644
index 69a3346..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/message/mail/MailSendMessage.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.njcn.rdms.module.system.mq.message.mail;
-
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-import java.io.File;
-import java.util.Collection;
-
-/**
- * 邮箱发送消息
- *
- * @author hongawen
- */
-@Data
-public class MailSendMessage {
-
- /**
- * 邮件日志编号
- */
- @NotNull(message = "邮件日志编号不能为空")
- private Long logId;
- /**
- * 接收邮件地址
- */
- @NotEmpty(message = "接收邮件地址不能为空")
- private Collection toMails;
- /**
- * 抄送邮件地址
- */
- private Collection ccMails;
- /**
- * 密送邮件地址
- */
- private Collection bccMails;
- /**
- * 邮件账号编号
- */
- @NotNull(message = "邮件账号编号不能为空")
- private Long accountId;
-
- /**
- * 邮件发件人
- */
- private String nickname;
- /**
- * 邮件标题
- */
- @NotEmpty(message = "邮件标题不能为空")
- private String title;
- /**
- * 邮件内容
- */
- @NotEmpty(message = "邮件内容不能为空")
- private String content;
-
- /**
- * 附件
- */
- private File[] attachments;
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/producer/mail/MailProducer.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/producer/mail/MailProducer.java
deleted file mode 100644
index 4dfc4e6..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/mq/producer/mail/MailProducer.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.njcn.rdms.module.system.mq.producer.mail;
-
-import com.njcn.rdms.module.system.mq.message.mail.MailSendMessage;
-import jakarta.annotation.Resource;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-
-import java.io.File;
-import java.util.Collection;
-
-/**
- * Mail 邮件相关消息的 Producer
- *
- * @author hongawen
- * @since 2021/4/19 13:33
- */
-@Slf4j
-@Component
-public class MailProducer {
-
- @Resource
- private ApplicationContext applicationContext;
-
- /**
- * 发送 {@link MailSendMessage} 消息
- *
- * @param sendLogId 发送日志编码
- * @param toMails 接收邮件地址
- * @param ccMails 抄送邮件地址
- * @param bccMails 密送邮件地址
- * @param accountId 邮件账号编号
- * @param nickname 邮件发件人
- * @param title 邮件标题
- * @param content 邮件内容
- * @param attachments 附件
- */
- public void sendMailSendMessage(Long sendLogId,
- Collection toMails, Collection ccMails, Collection bccMails,
- Long accountId, String nickname, String title, String content,
- File[] attachments) {
- MailSendMessage message = new MailSendMessage()
- .setLogId(sendLogId)
- .setToMails(toMails).setCcMails(ccMails).setBccMails(bccMails)
- .setAccountId(accountId).setNickname(nickname)
- .setTitle(title).setContent(content).setAttachments(attachments);
- applicationContext.publishEvent(message);
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/CodegenService.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/CodegenService.java
deleted file mode 100644
index a92c0b9..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/CodegenService.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.njcn.rdms.module.system.service.codegen;
-
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.CodegenCreateListReqVO;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.CodegenUpdateReqVO;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.table.CodegenTablePageReqVO;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.table.DatabaseTableRespVO;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenColumnDO;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenTableDO;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 代码生成 Service 接口
- *
- * @author hongawen
- */
-public interface CodegenService {
-
- /**
- * 基于数据库的表结构,创建代码生成器的表定义
- *
- * @param author 作者
- * @param reqVO 表信息
- * @return 创建的表定义的编号数组
- */
- List createCodegenList(String author, CodegenCreateListReqVO reqVO);
-
- /**
- * 更新数据库的表和字段定义
- *
- * @param updateReqVO 更新信息
- */
- void updateCodegen(CodegenUpdateReqVO updateReqVO);
-
- /**
- * 基于数据库的表结构,同步数据库的表和字段定义
- *
- * @param tableId 表编号
- */
- void syncCodegenFromDB(Long tableId);
-
- /**
- * 删除数据库的表和字段定义
- *
- * @param tableId 数据编号
- */
- void deleteCodegen(Long tableId);
-
- /**
- * 批量删除数据库的表和字段定义
- *
- * @param tableIds 数据编号列表
- */
- void deleteCodegenList(List tableIds);
-
- /**
- * 获得表定义列表
- *
- * @param dataSourceConfigId 数据源配置的编号
- * @return 表定义列表
- */
- List getCodegenTableList(Long dataSourceConfigId);
-
- /**
- * 获得表定义分页
- *
- * @param pageReqVO 分页条件
- * @return 表定义分页
- */
- PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO);
-
- /**
- * 获得表定义
- *
- * @param id 表编号
- * @return 表定义
- */
- CodegenTableDO getCodegenTable(Long id);
-
- /**
- * 获得指定表的字段定义数组
- *
- * @param tableId 表编号
- * @return 字段定义数组
- */
- List getCodegenColumnListByTableId(Long tableId);
-
- /**
- * 执行指定表的代码生成
- *
- * @param tableId 表编号
- * @return 生成结果。key 为文件路径,value 为对应的代码内容
- */
- Map generationCodes(Long tableId);
-
- /**
- * 获得数据库自带的表定义列表
- *
- * @param dataSourceConfigId 数据源的配置编号
- * @param name 表名称
- * @param comment 表描述
- * @return 表定义列表
- */
- List getDatabaseTableList(Long dataSourceConfigId, String name, String comment);
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/CodegenServiceImpl.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/CodegenServiceImpl.java
deleted file mode 100644
index 9fb7666..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/CodegenServiceImpl.java
+++ /dev/null
@@ -1,310 +0,0 @@
-package com.njcn.rdms.module.system.service.codegen;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.annotation.DbType;
-import com.baomidou.mybatisplus.generator.config.po.TableField;
-import com.baomidou.mybatisplus.generator.config.po.TableInfo;
-import com.google.common.annotations.VisibleForTesting;
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.framework.common.util.object.BeanUtils;
-import com.njcn.rdms.framework.mybatis.core.util.JdbcUtils;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.CodegenCreateListReqVO;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.CodegenUpdateReqVO;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.table.CodegenTablePageReqVO;
-import com.njcn.rdms.module.system.controller.admin.codegen.vo.table.DatabaseTableRespVO;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenColumnDO;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenTableDO;
-import com.njcn.rdms.module.system.dal.dataobject.db.DataSourceConfigDO;
-import com.njcn.rdms.module.system.dal.mysql.codegen.CodegenColumnMapper;
-import com.njcn.rdms.module.system.dal.mysql.codegen.CodegenTableMapper;
-import com.njcn.rdms.module.system.enums.codegen.CodegenSceneEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenTemplateTypeEnum;
-import com.njcn.rdms.module.system.framework.codegen.config.CodegenProperties;
-import com.njcn.rdms.module.system.service.codegen.inner.CodegenBuilder;
-import com.njcn.rdms.module.system.service.codegen.inner.CodegenEngine;
-import com.njcn.rdms.module.system.service.db.DataSourceConfigService;
-import com.njcn.rdms.module.system.service.db.DatabaseTableService;
-import jakarta.annotation.Resource;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import java.util.function.BiPredicate;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
-import static com.njcn.rdms.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.njcn.rdms.framework.common.util.collection.CollectionUtils.convertMap;
-import static com.njcn.rdms.framework.common.util.collection.CollectionUtils.convertSet;
-import static com.njcn.rdms.module.system.enums.ErrorCodeConstants.*;
-
-/**
- * 代码生成 Service 实现类
- *
- * @author hongawen
- */
-@Service
-public class CodegenServiceImpl implements CodegenService {
-
- @Resource
- private DatabaseTableService databaseTableService;
- @Resource
- private DataSourceConfigService dataSourceConfigService;
-
- @Resource
- private CodegenTableMapper codegenTableMapper;
- @Resource
- private CodegenColumnMapper codegenColumnMapper;
-
- @Resource
- private CodegenBuilder codegenBuilder;
- @Resource
- private CodegenEngine codegenEngine;
-
- @Resource
- private CodegenProperties codegenProperties;
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public List createCodegenList(String author, CodegenCreateListReqVO reqVO) {
- List ids = new ArrayList<>(reqVO.getTableNames().size());
- // 遍历添加。虽然效率会低一点,但是没必要做成完全批量,因为不会这么大量
- reqVO.getTableNames().forEach(tableName -> ids.add(createCodegen(author, reqVO.getDataSourceConfigId(), tableName)));
- return ids;
- }
-
- private Long createCodegen(String author, Long dataSourceConfigId, String tableName) {
- // 从数据库中,获得数据库表结构
- TableInfo tableInfo = databaseTableService.getTable(dataSourceConfigId, tableName);
- // 导入
- return createCodegen0(author, dataSourceConfigId, tableInfo);
- }
-
- private Long createCodegen0(String author, Long dataSourceConfigId, TableInfo tableInfo) {
- // 校验导入的表和字段非空
- validateTableInfo(tableInfo);
- // 校验是否已经存在
- if (codegenTableMapper.selectByTableNameAndDataSourceConfigId(tableInfo.getName(),
- dataSourceConfigId) != null) {
- throw exception(CODEGEN_TABLE_EXISTS);
- }
-
- // 构建 CodegenTableDO 对象,插入到 DB 中
- CodegenTableDO table = codegenBuilder.buildTable(tableInfo);
- table.setDataSourceConfigId(dataSourceConfigId);
- table.setScene(CodegenSceneEnum.ADMIN.getScene()); // 默认配置下,使用管理后台的模板
- table.setFrontType(codegenProperties.getFrontType());
- table.setAuthor(author);
- codegenTableMapper.insert(table);
-
- // 构建 CodegenColumnDO 数组,插入到 DB 中
- List columns = codegenBuilder.buildColumns(table.getId(), tableInfo.getFields());
- // 如果没有主键,则使用第一个字段作为主键
- if (!tableInfo.isHavePrimaryKey()) {
- columns.get(0).setPrimaryKey(true);
- }
- codegenColumnMapper.insertBatch(columns);
- return table.getId();
- }
-
- @VisibleForTesting
- void validateTableInfo(TableInfo tableInfo) {
- if (tableInfo == null) {
- throw exception(CODEGEN_IMPORT_TABLE_NULL);
- }
- if (StrUtil.isEmpty(tableInfo.getComment())) {
- throw exception(CODEGEN_TABLE_INFO_TABLE_COMMENT_IS_NULL);
- }
- if (CollUtil.isEmpty(tableInfo.getFields())) {
- throw exception(CODEGEN_IMPORT_COLUMNS_NULL);
- }
- tableInfo.getFields().forEach(field -> {
- if (StrUtil.isEmpty(field.getComment())) {
- throw exception(CODEGEN_TABLE_INFO_COLUMN_COMMENT_IS_NULL, field.getName());
- }
- });
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void updateCodegen(CodegenUpdateReqVO updateReqVO) {
- // 校验是否已经存在
- if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) {
- throw exception(CODEGEN_TABLE_NOT_EXISTS);
- }
- // 校验主表字段存在
- if (Objects.equals(updateReqVO.getTable().getTemplateType(), CodegenTemplateTypeEnum.SUB.getType())) {
- if (codegenTableMapper.selectById(updateReqVO.getTable().getMasterTableId()) == null) {
- throw exception(CODEGEN_MASTER_TABLE_NOT_EXISTS, updateReqVO.getTable().getMasterTableId());
- }
- if (CollUtil.findOne(updateReqVO.getColumns(), // 关联主表的字段不存在
- column -> column.getId().equals(updateReqVO.getTable().getSubJoinColumnId())) == null) {
- throw exception(CODEGEN_SUB_COLUMN_NOT_EXISTS, updateReqVO.getTable().getSubJoinColumnId());
- }
- }
-
- // 更新 table 表定义
- CodegenTableDO updateTableObj = BeanUtils.toBean(updateReqVO.getTable(), CodegenTableDO.class);
- codegenTableMapper.updateById(updateTableObj);
- // 更新 column 字段定义
- List updateColumnObjs = BeanUtils.toBean(updateReqVO.getColumns(), CodegenColumnDO.class);
- updateColumnObjs.forEach(updateColumnObj -> codegenColumnMapper.updateById(updateColumnObj));
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void syncCodegenFromDB(Long tableId) {
- // 校验是否已经存在
- CodegenTableDO table = codegenTableMapper.selectById(tableId);
- if (table == null) {
- throw exception(CODEGEN_TABLE_NOT_EXISTS);
- }
- // 从数据库中,获得数据库表结构
- TableInfo tableInfo = databaseTableService.getTable(table.getDataSourceConfigId(), table.getTableName());
- // 执行同步
- syncCodegen0(tableId, tableInfo);
- }
-
- private void syncCodegen0(Long tableId, TableInfo tableInfo) {
- // 1. 校验导入的表和字段非空
- validateTableInfo(tableInfo);
- List tableFields = tableInfo.getFields();
-
- // 2. 构建 CodegenColumnDO 数组,只同步新增的字段
- List codegenColumns = codegenColumnMapper.selectListByTableId(tableId);
- Set codegenColumnNames = convertSet(codegenColumns, CodegenColumnDO::getColumnName);
-
- // 3.1 计算需要【修改】的字段,插入时重新插入,删除时将原来的删除
- Map codegenColumnDOMap = convertMap(codegenColumns, CodegenColumnDO::getColumnName);
- BiPredicate primaryKeyPredicate =
- (tableField, codegenColumn) -> tableField.getMetaInfo().getJdbcType().name().equals(codegenColumn.getDataType())
- && tableField.getMetaInfo().isNullable() == codegenColumn.getNullable()
- && tableField.isKeyFlag() == codegenColumn.getPrimaryKey()
- && tableField.getComment().equals(codegenColumn.getColumnComment());
- Set modifyFieldNames = IntStream.range(0, tableFields.size()).mapToObj(index -> {
- TableField tableField = tableFields.get(index);
- String columnName = tableField.getColumnName();
- CodegenColumnDO codegenColumn = codegenColumnDOMap.get(columnName);
- if (codegenColumn == null) {
- return null;
- }
- if (!primaryKeyPredicate.test(tableField, codegenColumn) || codegenColumn.getOrdinalPosition() != index) {
- return columnName;
- }
- return null;
- }).filter(Objects::nonNull).collect(Collectors.toSet());
- // 3.2 计算需要【删除】的字段
- Set tableFieldNames = convertSet(tableFields, TableField::getName);
- Set deleteColumnIds = codegenColumns.stream()
- .filter(column -> (!tableFieldNames.contains(column.getColumnName())) || modifyFieldNames.contains(column.getColumnName()))
- .map(CodegenColumnDO::getId).collect(Collectors.toSet());
- // 移除已经存在的字段
- tableFields.removeIf(column -> codegenColumnNames.contains(column.getColumnName()) && (!modifyFieldNames.contains(column.getColumnName())));
- if (CollUtil.isEmpty(tableFields) && CollUtil.isEmpty(deleteColumnIds)) {
- throw exception(CODEGEN_SYNC_NONE_CHANGE);
- }
-
- // 4.1 插入新增的字段
- List columns = codegenBuilder.buildColumns(tableId, tableFields);
- codegenColumnMapper.insertBatch(columns);
- // 4.2 删除不存在的字段
- if (CollUtil.isNotEmpty(deleteColumnIds)) {
- codegenColumnMapper.deleteByIds(deleteColumnIds);
- }
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void deleteCodegen(Long tableId) {
- // 校验是否已经存在
- if (codegenTableMapper.selectById(tableId) == null) {
- throw exception(CODEGEN_TABLE_NOT_EXISTS);
- }
-
- // 删除 table 表定义
- codegenTableMapper.deleteById(tableId);
- // 删除 column 字段定义
- codegenColumnMapper.deleteListByTableId(tableId);
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void deleteCodegenList(List tableIds) {
- // 批量删除 table 表定义
- codegenTableMapper.deleteByIds(tableIds);
- // 批量删除 column 字段定义
- codegenColumnMapper.deleteListByTableId(tableIds);
- }
-
- @Override
- public List getCodegenTableList(Long dataSourceConfigId) {
- return codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId);
- }
-
- @Override
- public PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO) {
- return codegenTableMapper.selectPage(pageReqVO);
- }
-
- @Override
- public CodegenTableDO getCodegenTable(Long id) {
- return codegenTableMapper.selectById(id);
- }
-
- @Override
- public List getCodegenColumnListByTableId(Long tableId) {
- return codegenColumnMapper.selectListByTableId(tableId);
- }
-
- @Override
- public Map generationCodes(Long tableId) {
- // 校验是否已经存在
- CodegenTableDO table = codegenTableMapper.selectById(tableId);
- if (table == null) {
- throw exception(CODEGEN_TABLE_NOT_EXISTS);
- }
- List columns = codegenColumnMapper.selectListByTableId(tableId);
- if (CollUtil.isEmpty(columns)) {
- throw exception(CODEGEN_COLUMN_NOT_EXISTS);
- }
-
- // 如果是主子表,则加载对应的子表信息
- List subTables = null;
- List> subColumnsList = null;
- if (CodegenTemplateTypeEnum.isMaster(table.getTemplateType())) {
- // 校验子表存在
- subTables = codegenTableMapper.selectListByTemplateTypeAndMasterTableId(
- CodegenTemplateTypeEnum.SUB.getType(), tableId);
- if (CollUtil.isEmpty(subTables)) {
- throw exception(CODEGEN_MASTER_GENERATION_FAIL_NO_SUB_TABLE);
- }
- // 校验子表的关联字段存在
- subColumnsList = new ArrayList<>();
- for (CodegenTableDO subTable : subTables) {
- List subColumns = codegenColumnMapper.selectListByTableId(subTable.getId());
- if (CollUtil.findOne(subColumns, column -> column.getId().equals(subTable.getSubJoinColumnId())) == null) {
- throw exception(CODEGEN_SUB_COLUMN_NOT_EXISTS, subTable.getId());
- }
- subColumnsList.add(subColumns);
- }
- }
-
- // 获取数据源对应的数据库类型
- DataSourceConfigDO dataSourceConfig = dataSourceConfigService.getDataSourceConfig(table.getDataSourceConfigId());
- DbType dbType = JdbcUtils.getDbType(dataSourceConfig.getUrl());
- // 执行生成
- return codegenEngine.execute(dbType, table, columns, subTables, subColumnsList);
- }
-
- @Override
- public List getDatabaseTableList(Long dataSourceConfigId, String name, String comment) {
- List tables = databaseTableService.getTableList(dataSourceConfigId, name, comment);
- // 移除在 Codegen 中,已经存在的
- Set existsTables = convertSet(
- codegenTableMapper.selectListByDataSourceConfigId(dataSourceConfigId), CodegenTableDO::getTableName);
- tables.removeIf(table -> existsTables.contains(table.getName()));
- return BeanUtils.toBean(tables, DatabaseTableRespVO.class);
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/inner/CodegenBuilder.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/inner/CodegenBuilder.java
deleted file mode 100644
index 2a77aba..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/inner/CodegenBuilder.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package com.njcn.rdms.module.system.service.codegen.inner;
-
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.ReflectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.generator.config.po.TableField;
-import com.baomidou.mybatisplus.generator.config.po.TableInfo;
-import com.google.common.collect.Sets;
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-import com.njcn.rdms.module.system.convert.codegen.CodegenConvert;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenColumnDO;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenTableDO;
-import com.njcn.rdms.module.system.enums.codegen.CodegenColumnHtmlTypeEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenColumnListConditionEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenTemplateTypeEnum;
-import org.springframework.stereotype.Component;
-
-import java.time.LocalDateTime;
-import java.util.*;
-
-import static cn.hutool.core.text.CharSequenceUtil.*;
-import static cn.hutool.core.util.RandomUtil.randomEle;
-import static cn.hutool.core.util.RandomUtil.randomInt;
-
-/**
- * 代码生成器的 Builder,负责:
- * 1. 将数据库的表 {@link TableInfo} 定义,构建成 {@link CodegenTableDO}
- * 2. 将数据库的列 {@link TableField} 构定义,建成 {@link CodegenColumnDO}
- */
-@Component
-public class CodegenBuilder {
-
- /**
- * 字段名与 {@link CodegenColumnListConditionEnum} 的默认映射
- * 注意,字段的匹配以后缀的方式
- */
- private static final Map COLUMN_LIST_OPERATION_CONDITION_MAPPINGS =
- MapUtil.builder()
- .put("name", CodegenColumnListConditionEnum.LIKE)
- .put("time", CodegenColumnListConditionEnum.BETWEEN)
- .put("date", CodegenColumnListConditionEnum.BETWEEN)
- .build();
-
- /**
- * 字段名与 {@link CodegenColumnHtmlTypeEnum} 的默认映射
- * 注意,字段的匹配以后缀的方式
- */
- private static final Map COLUMN_HTML_TYPE_MAPPINGS =
- MapUtil.builder()
- .put("status", CodegenColumnHtmlTypeEnum.RADIO)
- .put("sex", CodegenColumnHtmlTypeEnum.RADIO)
- .put("type", CodegenColumnHtmlTypeEnum.SELECT)
- .put("image", CodegenColumnHtmlTypeEnum.IMAGE_UPLOAD)
- .put("file", CodegenColumnHtmlTypeEnum.FILE_UPLOAD)
- .put("content", CodegenColumnHtmlTypeEnum.EDITOR)
- .put("description", CodegenColumnHtmlTypeEnum.EDITOR)
- .put("demo", CodegenColumnHtmlTypeEnum.EDITOR)
- .put("time", CodegenColumnHtmlTypeEnum.DATETIME)
- .put("date", CodegenColumnHtmlTypeEnum.DATETIME)
- .build();
-
- /**
- * 多租户编号的字段名
- */
- public static final String TENANT_ID_FIELD = "tenantId";
- /**
- * {@link BaseDO} 的字段
- */
- public static final Set BASE_DO_FIELDS = new HashSet<>();
- /**
- * 新增操作,不需要传递的字段
- */
- private static final Set CREATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id");
- /**
- * 修改操作,不需要传递的字段
- */
- private static final Set UPDATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet();
- /**
- * 列表操作的条件,不需要传递的字段
- */
- private static final Set LIST_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id");
- /**
- * 列表操作的结果,不需要返回的字段
- */
- private static final Set LIST_OPERATION_RESULT_EXCLUDE_COLUMN = Sets.newHashSet();
-
- static {
- Arrays.stream(ReflectUtil.getFields(BaseDO.class)).forEach(field -> BASE_DO_FIELDS.add(field.getName()));
- BASE_DO_FIELDS.add(TENANT_ID_FIELD);
- // 处理 OPERATION 相关的字段
- CREATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
- UPDATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
- LIST_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
- LIST_OPERATION_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是可能需要传递的
- LIST_OPERATION_RESULT_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
- LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是需要返回的
- }
-
- public CodegenTableDO buildTable(TableInfo tableInfo) {
- CodegenTableDO table = CodegenConvert.INSTANCE.convert(tableInfo);
- initTableDefault(table);
- return table;
- }
-
- /**
- * 初始化 Table 表的默认字段
- *
- * @param table 表定义
- */
- private void initTableDefault(CodegenTableDO table) {
- // 以 system_dept 举例子。moduleName 为 system、businessName 为 dept、className 为 Dept
- // 如果希望以 System 前缀,则可以手动在【代码生成 - 修改生成配置 - 基本信息】,将实体类名称改为 SystemDept 即可
- String tableName = table.getTableName().toLowerCase();
- // 第一步,_ 前缀的前面,作为 module 名字;第二步,moduleName 必须小写;
- table.setModuleName(subBefore(tableName, '_', false).toLowerCase());
- // 第一步,第一个 _ 前缀的后面,作为 module 名字; 第二步,可能存在多个 _ 的情况,转换成驼峰; 第三步,businessName 必须小写;
- table.setBusinessName(toCamelCase(subAfter(tableName, '_', false)).toLowerCase());
- // 驼峰 + 首字母大写;第一步,第一个 _ 前缀的后面,作为 class 名字;第二步,驼峰命名
- table.setClassName(upperFirst(toCamelCase(subAfter(tableName, '_', false))));
- // 去除结尾的表,作为类描述
- table.setClassComment(StrUtil.removeSuffixIgnoreCase(table.getTableComment(), "表"));
- table.setTemplateType(CodegenTemplateTypeEnum.ONE.getType());
- }
-
- public List buildColumns(Long tableId, List tableFields) {
- List columns = CodegenConvert.INSTANCE.convertList(tableFields);
- int index = 1;
- for (CodegenColumnDO column : columns) {
- column.setTableId(tableId);
- column.setOrdinalPosition(index++);
- // 特殊处理:Byte => Integer
- if (Byte.class.getSimpleName().equals(column.getJavaType())) {
- column.setJavaType(Integer.class.getSimpleName());
- }
- // 初始化 Column 列的默认字段
- processColumnOperation(column); // 处理 CRUD 相关的字段的默认值
- processColumnUI(column); // 处理 UI 相关的字段的默认值
- processColumnExample(column); // 处理字段的 swagger example 示例
- }
- return columns;
- }
-
- private void processColumnOperation(CodegenColumnDO column) {
- // 处理 createOperation 字段
- column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
- && !column.getPrimaryKey()); // 对于主键,创建时无需传递
- // 处理 updateOperation 字段
- column.setUpdateOperation(!UPDATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
- || column.getPrimaryKey()); // 对于主键,更新时需要传递
- // 处理 listOperation 字段
- column.setListOperation(!LIST_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField())
- && !column.getPrimaryKey()); // 对于主键,列表过滤不需要传递
- // 处理 listOperationCondition 字段
- COLUMN_LIST_OPERATION_CONDITION_MAPPINGS.entrySet().stream()
- .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey()))
- .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition()));
- if (column.getListOperationCondition() == null) {
- column.setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition());
- }
- // 处理 listOperationResult 字段
- column.setListOperationResult(!LIST_OPERATION_RESULT_EXCLUDE_COLUMN.contains(column.getJavaField()));
- }
-
- private void processColumnUI(CodegenColumnDO column) {
- // 基于后缀进行匹配
- COLUMN_HTML_TYPE_MAPPINGS.entrySet().stream()
- .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey()))
- .findFirst().ifPresent(entry -> column.setHtmlType(entry.getValue().getType()));
- // 如果是 Boolean 类型时,设置为 radio 类型.
- if (Boolean.class.getSimpleName().equals(column.getJavaType())) {
- column.setHtmlType(CodegenColumnHtmlTypeEnum.RADIO.getType());
- }
- // 如果是 LocalDateTime 类型,则设置为 datetime 类型
- if (LocalDateTime.class.getSimpleName().equals(column.getJavaType())) {
- column.setHtmlType(CodegenColumnHtmlTypeEnum.DATETIME.getType());
- }
- // 兜底,设置默认为 input 类型
- if (column.getHtmlType() == null) {
- column.setHtmlType(CodegenColumnHtmlTypeEnum.INPUT.getType());
- }
- }
-
- /**
- * 处理字段的 swagger example 示例
- *
- * @param column 字段
- */
- private void processColumnExample(CodegenColumnDO column) {
- // id、price、count 等可能是整数的后缀
- if (StrUtil.endWithAnyIgnoreCase(column.getJavaField(), "id", "price", "count")) {
- column.setExample(String.valueOf(randomInt(1, Short.MAX_VALUE)));
- return;
- }
- // name
- if (StrUtil.endWithIgnoreCase(column.getJavaField(), "name")) {
- column.setExample(randomEle(new String[]{"张三", "李四", "王五", "赵六", "芋艿"}));
- return;
- }
- // status
- if (StrUtil.endWithAnyIgnoreCase(column.getJavaField(), "status", "type")) {
- column.setExample(randomEle(new String[]{"1", "2"}));
- return;
- }
- // url
- if (StrUtil.endWithIgnoreCase(column.getColumnName(), "url")) {
- column.setExample("https://www.iocoder.cn");
- return;
- }
- // reason
- if (StrUtil.endWithIgnoreCase(column.getColumnName(), "reason")) {
- column.setExample(randomEle(new String[]{"不喜欢", "不对", "不好", "不香"}));
- return;
- }
- // description、memo、remark
- if (StrUtil.endWithAnyIgnoreCase(column.getColumnName(), "description", "memo", "remark")) {
- column.setExample(randomEle(new String[]{"你猜", "随便", "你说的对"}));
- }
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/inner/CodegenEngine.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/inner/CodegenEngine.java
deleted file mode 100644
index 4e5f8fe..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/codegen/inner/CodegenEngine.java
+++ /dev/null
@@ -1,679 +0,0 @@
-package com.njcn.rdms.module.system.service.codegen.inner;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.template.TemplateConfig;
-import cn.hutool.extra.template.TemplateEngine;
-import cn.hutool.extra.template.engine.velocity.VelocityEngine;
-import cn.hutool.system.SystemUtil;
-import com.baomidou.mybatisplus.annotation.DbType;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ImmutableTable;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Table;
-import com.njcn.rdms.framework.apilog.core.annotation.ApiAccessLog;
-import com.njcn.rdms.framework.apilog.core.enums.OperateTypeEnum;
-import com.njcn.rdms.framework.common.exception.util.ServiceExceptionUtil;
-import com.njcn.rdms.framework.common.pojo.CommonResult;
-import com.njcn.rdms.framework.common.pojo.PageParam;
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.framework.common.util.collection.CollectionUtils;
-import com.njcn.rdms.framework.common.util.date.DateUtils;
-import com.njcn.rdms.framework.common.util.date.LocalDateTimeUtils;
-import com.njcn.rdms.framework.common.util.object.BeanUtils;
-import com.njcn.rdms.framework.common.util.object.ObjectUtils;
-import com.njcn.rdms.framework.common.util.string.StrUtils;
-import com.njcn.rdms.framework.excel.core.annotations.DictFormat;
-import com.njcn.rdms.framework.excel.core.convert.DictConvert;
-import com.njcn.rdms.framework.excel.core.util.ExcelUtils;
-import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
-import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
-import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenColumnDO;
-import com.njcn.rdms.module.system.dal.dataobject.codegen.CodegenTableDO;
-import com.njcn.rdms.module.system.enums.codegen.CodegenFrontTypeEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenSceneEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenTemplateTypeEnum;
-import com.njcn.rdms.module.system.enums.codegen.CodegenVOTypeEnum;
-import com.njcn.rdms.module.system.framework.codegen.config.CodegenProperties;
-import jakarta.annotation.PostConstruct;
-import jakarta.annotation.Resource;
-import lombok.Setter;
-import org.springframework.stereotype.Component;
-import org.springframework.util.ClassUtils;
-
-import java.util.*;
-
-import static cn.hutool.core.map.MapUtil.getStr;
-import static cn.hutool.core.text.CharSequenceUtil.*;
-
-/**
- * 代码生成的引擎,用于具体生成代码
- * 目前基于 {@link org.apache.velocity.app.Velocity} 模板引擎实现
- *
- * 考虑到 Java 模板引擎的框架非常多,Freemarker、Velocity、Thymeleaf 等等,所以我们采用 hutool 封装的 {@link cn.hutool.extra.template.Template} 抽象
- *
- * @author hongawen
- */
-@Component
-public class CodegenEngine {
-
- /**
- * 后端的模板配置
- *
- * key:模板在 resources 的地址
- * value:生成的路径
- */
- private static final Map SERVER_TEMPLATES = MapUtil.builder(new LinkedHashMap<>()) // 有序
- // Java module-biz(server) Main
- .put(javaTemplatePath("controller/vo/pageReqVO"), javaModuleImplVOFilePath("PageReqVO"))
- .put(javaTemplatePath("controller/vo/listReqVO"), javaModuleImplVOFilePath("ListReqVO"))
- .put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO"))
- .put(javaTemplatePath("controller/vo/saveReqVO"), javaModuleImplVOFilePath("SaveReqVO"))
- .put(javaTemplatePath("controller/controller"), javaModuleImplControllerFilePath())
- .put(javaTemplatePath("dal/do"),
- javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${table.className}DO"))
- .put(javaTemplatePath("dal/do_sub"), // 特殊:主子表专属逻辑
- javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${subTable.className}DO"))
- .put(javaTemplatePath("dal/mapper"),
- javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${table.className}Mapper"))
- .put(javaTemplatePath("dal/mapper_sub"), // 特殊:主子表专属逻辑
- javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${subTable.className}Mapper"))
- .put(javaTemplatePath("dal/mapper.xml"), mapperXmlFilePath())
- .put(javaTemplatePath("service/serviceImpl"),
- javaModuleImplMainFilePath("service/${table.businessName}/${table.className}ServiceImpl"))
- .put(javaTemplatePath("service/service"),
- javaModuleImplMainFilePath("service/${table.businessName}/${table.className}Service"))
- // Java module-biz(server) Test
- .put(javaTemplatePath("test/serviceTest"),
- javaModuleImplTestFilePath("service/${table.businessName}/${table.className}ServiceImplTest"))
- // Java module-api Main
- .put(javaTemplatePath("enums/errorcode"), javaModuleApiMainFilePath("enums/ErrorCodeConstants_手动操作"))
- // SQL
- .put("codegen/sql/sql.vm", "sql/sql.sql")
- .put("codegen/sql/h2.vm", "sql/h2.sql")
- .build();
-
- /**
- * 前端的配置模版
- *
- * key1:UI 模版的类型 {@link CodegenFrontTypeEnum#getType()}
- * key2:模板在 resources 的地址
- * value:生成的路径
- */
- private static final Table FRONT_TEMPLATES = ImmutableTable.builder()
- // VUE2_ELEMENT_UI
- .put(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType(), vueTemplatePath("views/index.vue"),
- vueFilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
- .put(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType(), vueTemplatePath("api/api.js"),
- vueFilePath("api/${table.moduleName}/${table.businessName}/index.js"))
- .put(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType(), vueTemplatePath("views/form.vue"),
- vueFilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType(), vueTemplatePath("views/components/form_sub_normal.vue"), // 特殊:主子表专属逻辑
- vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType(), vueTemplatePath("views/components/form_sub_inner.vue"), // 特殊:主子表专属逻辑
- vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType(), vueTemplatePath("views/components/form_sub_erp.vue"), // 特殊:主子表专属逻辑
- vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType(), vueTemplatePath("views/components/list_sub_inner.vue"), // 特殊:主子表专属逻辑
- vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue"))
- .put(CodegenFrontTypeEnum.VUE2_ELEMENT_UI.getType(), vueTemplatePath("views/components/list_sub_erp.vue"), // 特殊:主子表专属逻辑
- vueFilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue"))
- // VUE3_ELEMENT_PLUS
- .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("views/index.vue"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("views/form.vue"),
- vue3FilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("views/components/form_sub_normal.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("views/components/form_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("views/components/form_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}Form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("views/components/list_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("views/components/list_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3FilePath("views/${table.moduleName}/${table.businessName}/components/${subSimpleClassName}List.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ELEMENT_PLUS.getType(), vue3TemplatePath("api/api.ts"),
- vue3FilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
- .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("api/api.ts"),
- vue3UniappFilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
- .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("views/index.vue"),
- vue3UniappFilePath("pages-${table.moduleName}/${table.businessName}/index.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("components/search-form.vue"),
- vue3UniappFilePath("pages-${table.moduleName}/${table.businessName}/components/search-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("views/form/index.vue"),
- vue3UniappFilePath("pages-${table.moduleName}/${table.businessName}/form/index.vue"))
- .put(CodegenFrontTypeEnum.VUE3_ADMIN_UNIAPP_WOT.getType(), vue3AdminUniappTemplatePath("views/detail/index.vue"),
- vue3UniappFilePath("pages-${table.moduleName}/${table.businessName}/detail/index.vue"))
- // VUE3_VBEN2_ANTD_SCHEMA
- .put(CodegenFrontTypeEnum.VUE3_VBEN2_ANTD_SCHEMA.getType(), vue3VbenTemplatePath("views/data.ts"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/${classNameVar}.data.ts"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN2_ANTD_SCHEMA.getType(), vue3VbenTemplatePath("views/index.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN2_ANTD_SCHEMA.getType(), vue3VbenTemplatePath("views/form.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/${simpleClassName}Modal.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN2_ANTD_SCHEMA.getType(), vue3VbenTemplatePath("api/api.ts"),
- vue3VbenFilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
- // VUE3_VBEN5_ANTD_SCHEMA
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/data.ts"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/data.ts"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/index.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/form.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("api/api.ts"),
- vue3VbenFilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/modules/form_sub_normal.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/modules/form_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/modules/form_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/modules/list_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
- // VUE3_VBEN5_ANTD
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/index.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/form.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("api/api.ts"),
- vue3VbenFilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/modules/form_sub_normal.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/modules/form_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/modules/form_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/modules/list_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
- // VUE3_VBEN5_EP_SCHEMA
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/data.ts"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/data.ts"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/index.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/form.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("api/api.ts"),
- vue3VbenFilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/form_sub_normal.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/form_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/form_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/list_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_SCHEMA.getType(), vue3Vben5EpSchemaTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
- // VUE3_VBEN5_EP
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/index.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/index.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/form.vue"),
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("api/api.ts"),
- vue3VbenFilePath("api/${table.moduleName}/${table.businessName}/index.ts"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_normal.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/form_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-form.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/list_sub_inner.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
- .put(CodegenFrontTypeEnum.VUE3_VBEN5_EP_GENERAL.getType(), vue3Vben5EpGeneralTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑
- vue3VbenFilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue"))
- .build();
-
- @Resource
- private CodegenProperties codegenProperties;
-
- /**
- * 是否使用 jakarta 包,用于解决 Spring Boot 2.X 和 3.X 的兼容性问题
- *
- * true - 使用 jakarta.validation.constraints.*
- * false - 使用 javax.validation.constraints.*
- */
- @Setter // 允许设置的原因,是因为单测需要手动改变
- private Boolean jakartaEnable;
-
- /**
- * 是否为 rdms-cloud 项目,用于解决 Boot 和 Cloud 的 api 模块兼容性问题
- *
- * true - 需要有 rdms-module-xxx-api 模块
- * false - 不需要有,使用 api、enum 包即可
- */
- @Setter
- private Boolean cloudEnable;
-
- /**
- * 模板引擎,由 hutool 实现
- */
- private final TemplateEngine templateEngine;
- /**
- * 全局通用变量映射
- */
- private final Map globalBindingMap = new HashMap<>();
-
- public CodegenEngine() {
- // 初始化 TemplateEngine 属性
- TemplateConfig config = new TemplateConfig();
- config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH);
- this.templateEngine = new VelocityEngine(config);
- // 设置 javaxEnable,按照是否使用 JDK17 来判断
- this.jakartaEnable = SystemUtil.getJavaInfo().isJavaVersionAtLeast(1700) // 17.00 * 100
- && ClassUtils.isPresent("jakarta.annotation.Resource", ClassUtils.getDefaultClassLoader());
- // 设置 cloudEnable,按照是否使用 Spring Cloud 来判断
- this.cloudEnable = ClassUtils.isPresent("com.njcn.rdms.module.infra.framework.rpc.config.RpcConfiguration",
- ClassUtils.getDefaultClassLoader());
- }
-
- @PostConstruct
- @VisibleForTesting
- void initGlobalBindingMap() {
- // 全局配置
- globalBindingMap.put("basePackage", codegenProperties.getBasePackage());
- globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage()
- + '.' + "framework"); // 用于后续获取测试类的 package 地址
- globalBindingMap.put("jakartaPackage", jakartaEnable ? "jakarta" : "javax");
- globalBindingMap.put("voType", codegenProperties.getVoType());
- globalBindingMap.put("deleteBatchEnable", codegenProperties.getDeleteBatchEnable());
- // 全局 Java Bean
- globalBindingMap.put("CommonResultClassName", CommonResult.class.getName());
- globalBindingMap.put("PageResultClassName", PageResult.class.getName());
- // VO 类,独有字段
- globalBindingMap.put("PageParamClassName", PageParam.class.getName());
- globalBindingMap.put("DictFormatClassName", DictFormat.class.getName());
- // DO 类,独有字段
- globalBindingMap.put("BaseDOClassName", BaseDO.class.getName());
- globalBindingMap.put("baseDOFields", CodegenBuilder.BASE_DO_FIELDS);
- globalBindingMap.put("QueryWrapperClassName", LambdaQueryWrapperX.class.getName());
- globalBindingMap.put("BaseMapperClassName", BaseMapperX.class.getName());
- // Util 工具类
- globalBindingMap.put("ServiceExceptionUtilClassName", ServiceExceptionUtil.class.getName());
- globalBindingMap.put("DateUtilsClassName", DateUtils.class.getName());
- globalBindingMap.put("ExcelUtilsClassName", ExcelUtils.class.getName());
- globalBindingMap.put("LocalDateTimeUtilsClassName", LocalDateTimeUtils.class.getName());
- globalBindingMap.put("ObjectUtilsClassName", ObjectUtils.class.getName());
- globalBindingMap.put("DictConvertClassName", DictConvert.class.getName());
- globalBindingMap.put("ApiAccessLogClassName", ApiAccessLog.class.getName());
- globalBindingMap.put("OperateTypeEnumClassName", OperateTypeEnum.class.getName());
- globalBindingMap.put("BeanUtils", BeanUtils.class.getName());
- globalBindingMap.put("CollectionUtilsClassName", CollectionUtils.class.getName());
- }
-
- /**
- * 生成代码
- *
- * @param dbType 数据库类型
- * @param table 表定义
- * @param columns table 的字段定义数组
- * @param subTables 子表数组,当且仅当主子表时使用
- * @param subColumnsList subTables 的字段定义数组
- * @return 生成的代码,key 是路径,value 是对应代码
- */
- public Map execute(DbType dbType, CodegenTableDO table, List columns,
- List subTables, List> subColumnsList) {
- // 1.1 初始化 bindMap 上下文
- Map bindingMap = initBindingMap(dbType, table, columns, subTables, subColumnsList);
- // 1.2 获得模版
- Map templates = getTemplates(table.getFrontType());
-
- // 2. 执行生成
- Map result = Maps.newLinkedHashMapWithExpectedSize(templates.size()); // 有序
- templates.forEach((vmPath, filePath) -> {
- // 2.1 特殊:主子表专属逻辑
- if (isSubTemplate(vmPath)) {
- generateSubCode(table, subTables, result, vmPath, filePath, bindingMap);
- return;
- // 2.2 特殊:树表专属逻辑
- } else if (isPageReqVOTemplate(vmPath)) {
- // 减少多余的类生成,例如说 PageVO.java 类
- if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
- return;
- }
- } else if (isListReqVOTemplate(vmPath)) {
- // 减少多余的类生成,例如说 ListVO.java 类
- if (!CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
- return;
- }
- }
- // 2.3 默认生成
- generateCode(result, vmPath, filePath, bindingMap);
- });
- return result;
- }
-
- private void generateCode(Map result, String vmPath,
- String filePath, Map bindingMap) {
- filePath = formatFilePath(filePath, bindingMap);
- String content = templateEngine.getTemplate(vmPath).render(bindingMap);
- // 格式化代码
- content = prettyCode(content, vmPath);
- result.put(filePath, content);
- }
-
- private void generateSubCode(CodegenTableDO table, List subTables,
- Map result, String vmPath,
- String filePath, Map bindingMap) {
- // 没有子表,所以不生成
- if (CollUtil.isEmpty(subTables)) {
- return;
- }
- // 主子表的模式匹配。目的:过滤掉个性化的模版
- if (vmPath.contains("_normal")
- && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_NORMAL.getType())) {
- return;
- }
- if (vmPath.contains("_erp")
- && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_ERP.getType())) {
- return;
- }
- if (vmPath.contains("_inner")
- && ObjectUtil.notEqual(table.getTemplateType(), CodegenTemplateTypeEnum.MASTER_INNER.getType())) {
- return;
- }
-
- // 逐个生成
- for (int i = 0; i < subTables.size(); i++) {
- bindingMap.put("subIndex", i);
- generateCode(result, vmPath, filePath, bindingMap);
- }
- bindingMap.remove("subIndex");
- }
-
- /**
- * 格式化生成后的代码
- *
- * 因为尽量让 vm 模版简单,所以统一的处理都在这个方法。
- * 如果不处理,Vue 的 Pretty 格式校验可能会报错
- *
- * @param content 格式化前的代码
- * @param vmPath 模板路径
- * @return 格式化后的代码
- */
- private String prettyCode(String content, String vmPath) {
- // Vue 界面:去除字段后面多余的 , 逗号,解决前端的 Pretty 代码格式检查的报错(需要排除 vben5、vue3_admin_uniapp)
- if (!StrUtil.containsAny(vmPath, "vben5", "vue3_admin_uniapp")) {
- content = content.replaceAll(",\n}", "\n}").replaceAll(",\n }", "\n }");
- }
- // Vue 界面:去除多的 dateFormatter,只有一个的情况下,说明没使用到
- if (StrUtil.count(content, "dateFormatter") == 1) {
- content = StrUtils.removeLineContains(content, "dateFormatter");
- }
- // Vue2 界面:修正 $refs
- if (StrUtil.count(content, "this.refs") >= 1) {
- content = content.replace("this.refs", "this.$refs");
- }
- // Vue 界面:去除多的 dict 相关,只有一个的情况下,说明没使用到
- if (StrUtil.count(content, "getIntDictOptions") == 1) {
- content = content.replace("getIntDictOptions, ", "");
- }
- if (StrUtil.count(content, "getStrDictOptions") == 1) {
- content = content.replace("getStrDictOptions, ", "");
- }
- if (StrUtil.count(content, "getBoolDictOptions") == 1) {
- content = content.replace("getBoolDictOptions, ", "");
- }
- if (StrUtil.count(content, "DICT_TYPE.") == 0) {
- content = StrUtils.removeLineContains(content, "DICT_TYPE");
- }
- return content;
- }
-
- private Map initBindingMap(DbType dbType, CodegenTableDO table, List columns,
- List subTables, List> subColumnsList) {
- // 创建 bindingMap
- Map bindingMap = new HashMap<>(globalBindingMap);
- bindingMap.put("dbType", dbType);
- bindingMap.put("table", table);
- bindingMap.put("columns", columns);
- bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, CodegenColumnDO::getPrimaryKey)); // 主键字段
- bindingMap.put("sceneEnum", CodegenSceneEnum.valueOf(table.getScene()));
- // className 相关
- // 去掉指定前缀,将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀
- String className = table.getClassName();
- String simpleClassName = equalsAnyIgnoreCase(table.getClassName(), table.getModuleName()) ? table.getClassName()
- : removePrefix(table.getClassName(), upperFirst(table.getModuleName()));
- String classNameVar = lowerFirst(simpleClassName);
- bindingMap.put("simpleClassName", simpleClassName);
- bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type
- bindingMap.put("classNameVar", classNameVar); // 将 DictType 转换成 dictType,用于变量
- // 将 DictType 转换成 dict-type
- String simpleClassNameStrikeCase = toSymbolCase(simpleClassName, '-');
- bindingMap.put("simpleClassName_strikeCase", simpleClassNameStrikeCase);
- // permission 前缀
- bindingMap.put("permissionPrefix", table.getModuleName() + ":" + simpleClassNameStrikeCase);
-
- // 特殊:树表专属逻辑
- if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
- CodegenColumnDO treeParentColumn = CollUtil.findOne(columns,
- column -> Objects.equals(column.getId(), table.getTreeParentColumnId()));
- bindingMap.put("treeParentColumn", treeParentColumn);
- bindingMap.put("treeParentColumn_javaField_underlineCase", toUnderlineCase(treeParentColumn.getJavaField()));
- CodegenColumnDO treeNameColumn = CollUtil.findOne(columns,
- column -> Objects.equals(column.getId(), table.getTreeNameColumnId()));
- bindingMap.put("treeNameColumn", treeNameColumn);
- bindingMap.put("treeNameColumn_javaField_underlineCase", toUnderlineCase(treeNameColumn.getJavaField()));
- }
-
- // 特殊:主子表专属逻辑
- if (CollUtil.isNotEmpty(subTables)) {
- // 创建 bindingMap
- bindingMap.put("subTables", subTables);
- bindingMap.put("subColumnsList", subColumnsList);
- List subPrimaryColumns = new ArrayList<>();
- List subJoinColumns = new ArrayList<>();
- List subJoinColumnStrikeCases = new ArrayList<>();
- List subSimpleClassNames = new ArrayList<>();
- List subClassNameVars = new ArrayList<>();
- List simpleClassNameUnderlineCases = new ArrayList<>();
- List subSimpleClassNameStrikeCases = new ArrayList<>();
- for (int i = 0; i < subTables.size(); i++) {
- CodegenTableDO subTable = subTables.get(i);
- List subColumns = subColumnsList.get(i);
- subPrimaryColumns.add(CollectionUtils.findFirst(subColumns, CodegenColumnDO::getPrimaryKey)); //
- CodegenColumnDO subColumn = CollectionUtils.findFirst(subColumns, // 关联的字段
- column -> Objects.equals(column.getId(), subTable.getSubJoinColumnId()));
- subJoinColumns.add(subColumn);
- subJoinColumnStrikeCases.add(toSymbolCase(subColumn.getJavaField(), '-')); // 将 DictType 转换成 dict-type
- // className 相关
- String subSimpleClassName = removePrefix(subTable.getClassName(), upperFirst(subTable.getModuleName()));
- subSimpleClassNames.add(subSimpleClassName);
- simpleClassNameUnderlineCases.add(toUnderlineCase(subSimpleClassName)); // 将 DictType 转换成 dict_type
- subClassNameVars.add(lowerFirst(subSimpleClassName)); // 将 DictType 转换成 dictType,用于变量
- subSimpleClassNameStrikeCases.add(toSymbolCase(subSimpleClassName, '-')); // 将 DictType 转换成 dict-type
- }
- bindingMap.put("subPrimaryColumns", subPrimaryColumns);
- bindingMap.put("subJoinColumns", subJoinColumns);
- bindingMap.put("subJoinColumn_strikeCases", subJoinColumnStrikeCases);
- bindingMap.put("subSimpleClassNames", subSimpleClassNames);
- bindingMap.put("simpleClassNameUnderlineCases", simpleClassNameUnderlineCases);
- bindingMap.put("subClassNameVars", subClassNameVars);
- bindingMap.put("subSimpleClassName_strikeCases", subSimpleClassNameStrikeCases);
- }
-
- // 多个 vm 公用的 VO 变量
- if (ObjectUtil.equal(codegenProperties.getVoType(), CodegenVOTypeEnum.VO.getType())) {
- String prefixClass = CodegenSceneEnum.valueOf(table.getScene()).getPrefixClass();
- bindingMap.put("saveReqVOClass", prefixClass + className + "SaveReqVO");
- bindingMap.put("updateReqVOClass", prefixClass + className + "SaveReqVO");
- bindingMap.put("respVOClass", prefixClass + className + "RespVO");
- bindingMap.put("saveReqVOVar", "createReqVO");
- bindingMap.put("updateReqVOVar", "updateReqVO");
- } else if (ObjectUtil.equal(codegenProperties.getVoType(), CodegenVOTypeEnum.DO.getType())) {
- bindingMap.put("saveReqVOClass", className + "DO");
- bindingMap.put("updateReqVOClass", className + "DO");
- bindingMap.put("respVOClass", className + "DO");
- bindingMap.put("saveReqVOVar", classNameVar);
- bindingMap.put("updateReqVOVar", classNameVar);
- }
- return bindingMap;
- }
-
- private Map getTemplates(Integer frontType) {
- Map templates = new LinkedHashMap<>();
- templates.putAll(SERVER_TEMPLATES);
- templates.putAll(FRONT_TEMPLATES.row(frontType));
- // 如果是 Boot 项目,则不使用 api/server 模块
- if (Boolean.FALSE.equals(cloudEnable)) {
- SERVER_TEMPLATES.forEach((templatePath, filePath) -> {
- filePath = StrUtil.replace(filePath, "/rdms-module-${table.moduleName}-api", "");
- filePath = StrUtil.replace(filePath, "/rdms-module-${table.moduleName}-server", "");
- templates.put(templatePath, filePath);
- });
- }
- // 如果禁用单元测试,则移除对应的模版
- if (Boolean.FALSE.equals(codegenProperties.getUnitTestEnable())) {
- templates.remove(javaTemplatePath("test/serviceTest"));
- templates.remove("codegen/sql/h2.vm");
- }
- // 如果禁用 VO 类型,则移除对应的模版
- if (ObjectUtil.notEqual(codegenProperties.getVoType(), CodegenVOTypeEnum.VO.getType())) {
- templates.remove(javaTemplatePath("controller/vo/respVO"));
- templates.remove(javaTemplatePath("controller/vo/saveReqVO"));
- }
- return templates;
- }
-
- @SuppressWarnings("unchecked")
- private String formatFilePath(String filePath, Map bindingMap) {
- filePath = StrUtil.replace(filePath, "${basePackage}",
- getStr(bindingMap, "basePackage").replaceAll("\\.", "/"));
- filePath = StrUtil.replace(filePath, "${classNameVar}",
- getStr(bindingMap, "classNameVar"));
- filePath = StrUtil.replace(filePath, "${simpleClassName}",
- getStr(bindingMap, "simpleClassName"));
- // sceneEnum 包含的字段
- CodegenSceneEnum sceneEnum = (CodegenSceneEnum) bindingMap.get("sceneEnum");
- filePath = StrUtil.replace(filePath, "${sceneEnum.prefixClass}", sceneEnum.getPrefixClass());
- filePath = StrUtil.replace(filePath, "${sceneEnum.basePackage}", sceneEnum.getBasePackage());
- // table 包含的字段
- CodegenTableDO table = (CodegenTableDO) bindingMap.get("table");
- filePath = StrUtil.replace(filePath, "${table.moduleName}", table.getModuleName());
- filePath = StrUtil.replace(filePath, "${table.businessName}", table.getBusinessName());
- filePath = StrUtil.replace(filePath, "${table.className}", table.getClassName());
- // 特殊:主子表专属逻辑
- Integer subIndex = (Integer) bindingMap.get("subIndex");
- if (subIndex != null) {
- CodegenTableDO subTable = ((List) bindingMap.get("subTables")).get(subIndex);
- filePath = StrUtil.replace(filePath, "${subTable.moduleName}", subTable.getModuleName());
- filePath = StrUtil.replace(filePath, "${subTable.businessName}", subTable.getBusinessName());
- filePath = StrUtil.replace(filePath, "${subTable.className}", subTable.getClassName());
- filePath = StrUtil.replace(filePath, "${subSimpleClassName}",
- ((List) bindingMap.get("subSimpleClassNames")).get(subIndex));
- filePath = StrUtil.replace(filePath, "${subSimpleClassName_strikeCase}",
- ((List) bindingMap.get("subSimpleClassName_strikeCases")).get(subIndex));
- }
- return filePath;
- }
-
- private static String javaTemplatePath(String path) {
- return "codegen/java/" + path + ".vm";
- }
-
- private static String javaModuleImplVOFilePath(String path) {
- return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" +
- "vo/${sceneEnum.prefixClass}${table.className}" + path, "server", "main");
- }
-
- private static String javaModuleImplControllerFilePath() {
- return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" +
- "${sceneEnum.prefixClass}${table.className}Controller", "server", "main");
- }
-
- private static String javaModuleImplMainFilePath(String path) {
- return javaModuleFilePath(path, "server", "main");
- }
-
- private static String javaModuleApiMainFilePath(String path) {
- return javaModuleFilePath(path, "api", "main");
- }
-
- private static String javaModuleImplTestFilePath(String path) {
- return javaModuleFilePath(path, "server", "test");
- }
-
- private static String javaModuleFilePath(String path, String module, String src) {
- return "rdms-module-${table.moduleName}/" + // 顶级模块
- "rdms-module-${table.moduleName}-" + module + "/" + // 子模块
- "src/" + src + "/java/${basePackage}/module/${table.moduleName}/" + path + ".java";
- }
-
- private static String mapperXmlFilePath() {
- return "rdms-module-${table.moduleName}/" + // 顶级模块
- "rdms-module-${table.moduleName}-server/" + // 子模块
- "src/main/resources/mapper/${table.businessName}/${table.className}Mapper.xml";
- }
-
- private static String vueTemplatePath(String path) {
- return "codegen/vue/" + path + ".vm";
- }
-
- private static String vueFilePath(String path) {
- return "rdms-ui-${sceneEnum.basePackage}-vue2/" + // 顶级目录
- "src/" + path;
- }
-
- private static String vue3TemplatePath(String path) {
- return "codegen/vue3/" + path + ".vm";
- }
-
- private static String vue3FilePath(String path) {
- return "rdms-ui-${sceneEnum.basePackage}-vue3/" + // 顶级目录
- "src/" + path;
- }
-
- private static String vue3AdminUniappTemplatePath(String path) {
- return "codegen/vue3_admin_uniapp/" + path + ".vm";
- }
-
- private static String vue3UniappFilePath(String path) {
- return "rdms-ui-${sceneEnum.basePackage}-uniapp/" + // 顶级目录
- "src/" + path;
- }
-
- private static String vue3VbenFilePath(String path) {
- return "rdms-ui-${sceneEnum.basePackage}-vben/" + // 顶级目录
- "src/" + path;
- }
-
- private static String vue3VbenTemplatePath(String path) {
- return "codegen/vue3_vben/" + path + ".vm";
- }
-
- private static String vue3Vben5AntdSchemaTemplatePath(String path) {
- return "codegen/vue3_vben5_antd/schema/" + path + ".vm";
- }
-
- private static String vue3Vben5AntdGeneralTemplatePath(String path) {
- return "codegen/vue3_vben5_antd/general/" + path + ".vm";
- }
-
- private static String vue3Vben5EpSchemaTemplatePath(String path) {
- return "codegen/vue3_vben5_ele/schema/" + path + ".vm";
- }
-
- private static String vue3Vben5EpGeneralTemplatePath(String path) {
- return "codegen/vue3_vben5_ele/general/" + path + ".vm";
- }
-
- private static boolean isSubTemplate(String path) {
- return path.contains("_sub");
- }
-
- private static boolean isPageReqVOTemplate(String path) {
- return path.contains("pageReqVO");
- }
-
- private static boolean isListReqVOTemplate(String path) {
- return path.contains("listReqVO");
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DataSourceConfigService.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DataSourceConfigService.java
deleted file mode 100644
index b8b1c29..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DataSourceConfigService.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.njcn.rdms.module.system.service.db;
-
-import com.njcn.rdms.module.system.controller.admin.db.vo.DataSourceConfigSaveReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.db.DataSourceConfigDO;
-import jakarta.validation.Valid;
-
-import java.util.List;
-
-/**
- * 数据源配置 Service 接口
- *
- * @author hongawen
- */
-public interface DataSourceConfigService {
-
- /**
- * 创建数据源配置
- *
- * @param createReqVO 创建信息
- * @return 编号
- */
- Long createDataSourceConfig(@Valid DataSourceConfigSaveReqVO createReqVO);
-
- /**
- * 更新数据源配置
- *
- * @param updateReqVO 更新信息
- */
- void updateDataSourceConfig(@Valid DataSourceConfigSaveReqVO updateReqVO);
-
- /**
- * 删除数据源配置
- *
- * @param id 编号
- */
- void deleteDataSourceConfig(Long id);
-
- /**
- * 批量删除数据源配置
- *
- * @param ids 编号列表
- */
- void deleteDataSourceConfigList(List ids);
-
- /**
- * 获得数据源配置
- *
- * @param id 编号
- * @return 数据源配置
- */
- DataSourceConfigDO getDataSourceConfig(Long id);
-
- /**
- * 获得数据源配置列表
- *
- * @return 数据源配置列表
- */
- List getDataSourceConfigList();
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DataSourceConfigServiceImpl.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DataSourceConfigServiceImpl.java
deleted file mode 100644
index d16ec04..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DataSourceConfigServiceImpl.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.njcn.rdms.module.system.service.db;
-
-import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
-import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
-import com.njcn.rdms.framework.common.util.object.BeanUtils;
-import com.njcn.rdms.framework.mybatis.core.util.JdbcUtils;
-import com.njcn.rdms.module.system.controller.admin.db.vo.DataSourceConfigSaveReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.db.DataSourceConfigDO;
-import com.njcn.rdms.module.system.dal.mysql.db.DataSourceConfigMapper;
-import jakarta.annotation.Resource;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import java.util.List;
-import java.util.Objects;
-
-import static com.njcn.rdms.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.njcn.rdms.module.system.enums.ErrorCodeConstants.DATA_SOURCE_CONFIG_NOT_EXISTS;
-import static com.njcn.rdms.module.system.enums.ErrorCodeConstants.DATA_SOURCE_CONFIG_NOT_OK;
-
-/**
- * 数据源配置 Service 实现类
- *
- * @author hongawen
- */
-@Service
-@Validated
-public class DataSourceConfigServiceImpl implements DataSourceConfigService {
-
- @Resource
- private DataSourceConfigMapper dataSourceConfigMapper;
-
- @Resource
- private DynamicDataSourceProperties dynamicDataSourceProperties;
-
- @Override
- public Long createDataSourceConfig(DataSourceConfigSaveReqVO createReqVO) {
- DataSourceConfigDO config = BeanUtils.toBean(createReqVO, DataSourceConfigDO.class);
- validateConnectionOK(config);
-
- // 插入
- dataSourceConfigMapper.insert(config);
- // 返回
- return config.getId();
- }
-
- @Override
- public void updateDataSourceConfig(DataSourceConfigSaveReqVO updateReqVO) {
- // 校验存在
- validateDataSourceConfigExists(updateReqVO.getId());
- DataSourceConfigDO updateObj = BeanUtils.toBean(updateReqVO, DataSourceConfigDO.class);
- validateConnectionOK(updateObj);
-
- // 更新
- dataSourceConfigMapper.updateById(updateObj);
- }
-
- @Override
- public void deleteDataSourceConfig(Long id) {
- // 校验存在
- validateDataSourceConfigExists(id);
- // 删除
- dataSourceConfigMapper.deleteById(id);
- }
-
- @Override
- public void deleteDataSourceConfigList(List ids) {
- dataSourceConfigMapper.deleteByIds(ids);
- }
-
- private void validateDataSourceConfigExists(Long id) {
- if (dataSourceConfigMapper.selectById(id) == null) {
- throw exception(DATA_SOURCE_CONFIG_NOT_EXISTS);
- }
- }
-
- @Override
- public DataSourceConfigDO getDataSourceConfig(Long id) {
- // 如果 id 为 0,默认为 master 的数据源
- if (Objects.equals(id, DataSourceConfigDO.ID_MASTER)) {
- return buildMasterDataSourceConfig();
- }
- // 从 DB 中读取
- return dataSourceConfigMapper.selectById(id);
- }
-
- @Override
- public List getDataSourceConfigList() {
- List result = dataSourceConfigMapper.selectList();
- // 补充 master 数据源
- result.add(0, buildMasterDataSourceConfig());
- return result;
- }
-
- private void validateConnectionOK(DataSourceConfigDO config) {
- boolean success = JdbcUtils.isConnectionOK(config.getUrl(), config.getUsername(), config.getPassword());
- if (!success) {
- throw exception(DATA_SOURCE_CONFIG_NOT_OK);
- }
- }
-
- private DataSourceConfigDO buildMasterDataSourceConfig() {
- String primary = dynamicDataSourceProperties.getPrimary();
- DataSourceProperty dataSourceProperty = dynamicDataSourceProperties.getDatasource().get(primary);
- return new DataSourceConfigDO().setId(DataSourceConfigDO.ID_MASTER).setName(primary)
- .setUrl(dataSourceProperty.getUrl())
- .setUsername(dataSourceProperty.getUsername())
- .setPassword(dataSourceProperty.getPassword());
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DatabaseTableService.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DatabaseTableService.java
deleted file mode 100644
index 8491647..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DatabaseTableService.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.njcn.rdms.module.system.service.db;
-
-import com.baomidou.mybatisplus.generator.config.po.TableInfo;
-
-import java.util.List;
-
-/**
- * 数据库表 Service
- *
- * @author hongawen
- */
-public interface DatabaseTableService {
-
- /**
- * 获得表列表,基于表名称 + 表描述进行模糊匹配
- *
- * @param dataSourceConfigId 数据源配置的编号
- * @param nameLike 表名称,模糊匹配
- * @param commentLike 表描述,模糊匹配
- * @return 表列表
- */
- List getTableList(Long dataSourceConfigId, String nameLike, String commentLike);
-
- /**
- * 获得指定表名
- *
- * @param dataSourceConfigId 数据源配置的编号
- * @param tableName 表名称
- * @return 表
- */
- TableInfo getTable(Long dataSourceConfigId, String tableName);
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DatabaseTableServiceImpl.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DatabaseTableServiceImpl.java
deleted file mode 100644
index abdaf34..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/db/DatabaseTableServiceImpl.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.njcn.rdms.module.system.service.db;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
-import com.baomidou.mybatisplus.generator.config.GlobalConfig;
-import com.baomidou.mybatisplus.generator.config.StrategyConfig;
-import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
-import com.baomidou.mybatisplus.generator.config.po.TableInfo;
-import com.baomidou.mybatisplus.generator.config.rules.DateType;
-import com.baomidou.mybatisplus.generator.query.SQLQuery;
-import com.njcn.rdms.framework.mybatis.core.util.JdbcUtils;
-import com.njcn.rdms.module.system.dal.dataobject.db.DataSourceConfigDO;
-import jakarta.annotation.Resource;
-import org.springframework.stereotype.Service;
-
-import java.util.Comparator;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 数据库表 Service 实现类
- *
- * @author hongawen
- */
-@Service
-public class DatabaseTableServiceImpl implements DatabaseTableService {
-
- @Resource
- private DataSourceConfigService dataSourceConfigService;
-
- @Override
- public List getTableList(Long dataSourceConfigId, String nameLike, String commentLike) {
- List tables = getTableList0(dataSourceConfigId, null);
- return tables.stream().filter(tableInfo -> (StrUtil.isEmpty(nameLike) || tableInfo.getName().contains(nameLike))
- && (StrUtil.isEmpty(commentLike) || tableInfo.getComment().contains(commentLike)))
- .collect(Collectors.toList());
- }
-
- @Override
- public TableInfo getTable(Long dataSourceConfigId, String name) {
- return CollUtil.getFirst(getTableList0(dataSourceConfigId, name));
- }
-
- private List getTableList0(Long dataSourceConfigId, String name) {
- // 获得数据源配置
- DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(dataSourceConfigId);
- Assert.notNull(config, "数据源({}) 不存在!", dataSourceConfigId);
-
- // 使用 MyBatis Plus Generator 解析表结构
- DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(config.getUrl(), config.getUsername(),
- config.getPassword());
- if (JdbcUtils.isSQLServer(config.getUrl())) { // 特殊:SQLServer jdbc 非标准,参见 https://github.com/baomidou/mybatis-plus/issues/5419
- dataSourceConfigBuilder.databaseQueryClass(SQLQuery.class);
- }
- StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder().enableSkipView(); // 忽略视图,业务上一般用不到
- if (StrUtil.isNotEmpty(name)) {
- strategyConfig.addInclude(name);
- } else {
- // 移除工作流和定时任务前缀的表名
- strategyConfig.addExclude("ACT_[\\S\\s]+|QRTZ_[\\S\\s]+|FLW_[\\S\\s]+|act_[\\S\\s]+|qrtz_[\\S\\s]+|flw_[\\S\\s]+");
- // 移除 ORACLE 相关的系统表
- strategyConfig.addExclude("IMPDP_[\\S\\s]+|ALL_[\\S\\s]+|HS_[\\S\\s]+|impdp_[\\S\\s]+|all_[\\S\\s]+|hs_[\\S\\s]+");
- strategyConfig.addExclude("[\\S\\s]+\\$[\\S\\s]+|[\\S\\s]+\\$"); // 表里不能有 $,一般有都是系统的表
- }
-
- GlobalConfig globalConfig = new GlobalConfig.Builder().dateType(DateType.TIME_PACK).build(); // 只使用 LocalDateTime 类型,不使用 LocalDate
- ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfigBuilder.build(), strategyConfig.build(),
- null, globalConfig, null);
- // 按照名字排序
- List tables = builder.getTableInfoList();
- tables.sort(Comparator.comparing(TableInfo::getName));
- return tables;
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiAccessLogService.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiAccessLogService.java
index 75328d8..a3f5dbe 100644
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiAccessLogService.java
+++ b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiAccessLogService.java
@@ -1,6 +1,6 @@
package com.njcn.rdms.module.system.service.logger;
-import com.njcn.rdms.framework.common.biz.infra.logger.dto.ApiAccessLogCreateReqDTO;
+import com.njcn.rdms.framework.common.biz.system.logger.dto.ApiAccessLogCreateReqDTO;
import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.module.system.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO;
import com.njcn.rdms.module.system.dal.dataobject.logger.ApiAccessLogDO;
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiAccessLogServiceImpl.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiAccessLogServiceImpl.java
index d9350bb..7b9026a 100644
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiAccessLogServiceImpl.java
+++ b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiAccessLogServiceImpl.java
@@ -1,6 +1,6 @@
package com.njcn.rdms.module.system.service.logger;
-import com.njcn.rdms.framework.common.biz.infra.logger.dto.ApiAccessLogCreateReqDTO;
+import com.njcn.rdms.framework.common.biz.system.logger.dto.ApiAccessLogCreateReqDTO;
import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.framework.common.util.object.BeanUtils;
import com.njcn.rdms.framework.common.util.string.StrUtils;
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiErrorLogService.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiErrorLogService.java
index 58b0a7d..128a196 100644
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiErrorLogService.java
+++ b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiErrorLogService.java
@@ -1,6 +1,6 @@
package com.njcn.rdms.module.system.service.logger;
-import com.njcn.rdms.framework.common.biz.infra.logger.dto.ApiErrorLogCreateReqDTO;
+import com.njcn.rdms.framework.common.biz.system.logger.dto.ApiErrorLogCreateReqDTO;
import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.module.system.controller.admin.logger.vo.apierrorlog.ApiErrorLogPageReqVO;
import com.njcn.rdms.module.system.dal.dataobject.logger.ApiErrorLogDO;
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiErrorLogServiceImpl.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiErrorLogServiceImpl.java
index 2455c96..b4fa00f 100644
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiErrorLogServiceImpl.java
+++ b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/logger/ApiErrorLogServiceImpl.java
@@ -1,6 +1,6 @@
package com.njcn.rdms.module.system.service.logger;
-import com.njcn.rdms.framework.common.biz.infra.logger.dto.ApiErrorLogCreateReqDTO;
+import com.njcn.rdms.framework.common.biz.system.logger.dto.ApiErrorLogCreateReqDTO;
import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.framework.common.util.object.BeanUtils;
import com.njcn.rdms.framework.common.util.string.StrUtils;
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailAccountService.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailAccountService.java
deleted file mode 100644
index dcf438c..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailAccountService.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.njcn.rdms.module.system.service.mail;
-
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO;
-import com.njcn.rdms.module.system.controller.admin.mail.vo.account.MailAccountSaveReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.mail.MailAccountDO;
-import jakarta.validation.Valid;
-
-import java.util.List;
-
-/**
- * 邮箱账号 Service 接口
- *
- * @author hongawen
- *
- */
-public interface MailAccountService {
-
- /**
- * 创建邮箱账号
- *
- * @param createReqVO 邮箱账号信息
- * @return 编号
- */
- Long createMailAccount(@Valid MailAccountSaveReqVO createReqVO);
-
- /**
- * 修改邮箱账号
- *
- * @param updateReqVO 邮箱账号信息
- */
- void updateMailAccount(@Valid MailAccountSaveReqVO updateReqVO);
-
- /**
- * 删除邮箱账号
- *
- * @param id 编号
- */
- void deleteMailAccount(Long id);
-
- /**
- * 批量删除邮箱账号
- *
- * @param ids 编号列表
- */
- void deleteMailAccountList(List ids);
-
- /**
- * 获取邮箱账号信息
- *
- * @param id 编号
- * @return 邮箱账号信息
- */
- MailAccountDO getMailAccount(Long id);
-
- /**
- * 从缓存中获取邮箱账号
- *
- * @param id 编号
- * @return 邮箱账号
- */
- MailAccountDO getMailAccountFromCache(Long id);
-
- /**
- * 获取邮箱账号分页信息
- *
- * @param pageReqVO 邮箱账号分页参数
- * @return 邮箱账号分页信息
- */
- PageResult getMailAccountPage(MailAccountPageReqVO pageReqVO);
-
- /**
- * 获取邮箱数组信息
- *
- * @return 邮箱账号信息数组
- */
- List getMailAccountList();
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailAccountServiceImpl.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailAccountServiceImpl.java
deleted file mode 100644
index f7c7b6a..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailAccountServiceImpl.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.njcn.rdms.module.system.service.mail;
-
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.framework.common.util.object.BeanUtils;
-import com.njcn.rdms.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO;
-import com.njcn.rdms.module.system.controller.admin.mail.vo.account.MailAccountSaveReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.mail.MailAccountDO;
-import com.njcn.rdms.module.system.dal.mysql.mail.MailAccountMapper;
-import com.njcn.rdms.module.system.dal.redis.RedisKeyConstants;
-import jakarta.annotation.Resource;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import java.util.List;
-
-import static com.njcn.rdms.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.njcn.rdms.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_NOT_EXISTS;
-import static com.njcn.rdms.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS;
-
-/**
- * 邮箱账号 Service 实现类
- *
- * @author hongawen
- *
- */
-@Service
-@Validated
-@Slf4j
-public class MailAccountServiceImpl implements MailAccountService {
-
- @Resource
- private MailAccountMapper mailAccountMapper;
-
- @Resource
- private MailTemplateService mailTemplateService;
-
- @Override
- public Long createMailAccount(MailAccountSaveReqVO createReqVO) {
- MailAccountDO account = BeanUtils.toBean(createReqVO, MailAccountDO.class);
- mailAccountMapper.insert(account);
- return account.getId();
- }
-
- @Override
- @CacheEvict(value = RedisKeyConstants.MAIL_ACCOUNT, key = "#updateReqVO.id")
- public void updateMailAccount(MailAccountSaveReqVO updateReqVO) {
- // 校验是否存在
- validateMailAccountExists(updateReqVO.getId());
-
- // 更新
- MailAccountDO updateObj = BeanUtils.toBean(updateReqVO, MailAccountDO.class);
- mailAccountMapper.updateById(updateObj);
- }
-
- @Override
- @CacheEvict(value = RedisKeyConstants.MAIL_ACCOUNT, key = "#id")
- public void deleteMailAccount(Long id) {
- // 校验是否存在账号
- validateMailAccountExists(id);
- // 校验是否存在关联模版
- if (mailTemplateService.getMailTemplateCountByAccountId(id) > 0) {
- throw exception(MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS);
- }
-
- // 删除
- mailAccountMapper.deleteById(id);
- }
-
- @Override
- @CacheEvict(value = RedisKeyConstants.MAIL_ACCOUNT,
- allEntries = true) // allEntries 清空所有缓存,因为 Spring Cache 不支持按照 ids 批量删除
- public void deleteMailAccountList(List ids) {
- // 1. 校验是否存在关联模版
- for (Long id : ids) {
- if (mailTemplateService.getMailTemplateCountByAccountId(id) > 0) {
- throw exception(MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS);
- }
- }
-
- // 2. 批量删除
- mailAccountMapper.deleteByIds(ids);
- }
-
- private void validateMailAccountExists(Long id) {
- if (mailAccountMapper.selectById(id) == null) {
- throw exception(MAIL_ACCOUNT_NOT_EXISTS);
- }
- }
-
- @Override
- public MailAccountDO getMailAccount(Long id) {
- return mailAccountMapper.selectById(id);
- }
-
- @Override
- @Cacheable(value = RedisKeyConstants.MAIL_ACCOUNT, key = "#id", unless = "#result == null")
- public MailAccountDO getMailAccountFromCache(Long id) {
- return getMailAccount(id);
- }
-
- @Override
- public PageResult getMailAccountPage(MailAccountPageReqVO pageReqVO) {
- return mailAccountMapper.selectPage(pageReqVO);
- }
-
- @Override
- public List getMailAccountList() {
- return mailAccountMapper.selectList();
- }
-
-}
diff --git a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailLogService.java b/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailLogService.java
deleted file mode 100644
index 88158cb..0000000
--- a/rdms-system/rdms-system-boot/src/main/java/com/njcn/rdms/module/system/service/mail/MailLogService.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.njcn.rdms.module.system.service.mail;
-
-import com.njcn.rdms.framework.common.pojo.PageResult;
-import com.njcn.rdms.module.system.controller.admin.mail.vo.log.MailLogPageReqVO;
-import com.njcn.rdms.module.system.dal.dataobject.mail.MailAccountDO;
-import com.njcn.rdms.module.system.dal.dataobject.mail.MailLogDO;
-import com.njcn.rdms.module.system.dal.dataobject.mail.MailTemplateDO;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 邮件日志 Service 接口
- *
- * @author hongawen
- *
- */
-public interface MailLogService {
-
- /**
- * 邮件日志分页
- *
- * @param pageVO 分页参数
- * @return 分页结果
- */
- PageResult getMailLogPage(MailLogPageReqVO pageVO);
-
- /**
- * 获得指定编号的邮件日志
- *
- * @param id 日志编号
- * @return 邮件日志
- */
- MailLogDO getMailLog(Long id);
-
- /**
- * 创建邮件日志
- *
- * @param userId 用户编码
- * @param userType 用户类型
- * @param toMails 收件人邮件
- * @param ccMails 收件人邮件
- * @param bccMails 收件人邮件
- * @param account 邮件账号信息
- * @param template 模版信息
- * @param templateContent 模版内容
- * @param templateParams 模版参数
- * @param isSend 是否发送成功
- * @return 日志编号
- */
- Long createMailLog(Long userId, Integer userType,
- Collection toMails, Collection