➕ 添加代碼生成器
This commit is contained in:
parent
a2c608a111
commit
2d3cb22612
|
@ -12,7 +12,7 @@ dist-ssr
|
||||||
.eslintcache
|
.eslintcache
|
||||||
report.html
|
report.html
|
||||||
vite.config.*.timestamp*
|
vite.config.*.timestamp*
|
||||||
application-prod.yml
|
|
||||||
bunny-web.site.csr
|
bunny-web.site.csr
|
||||||
bunny-web.site.key
|
bunny-web.site.key
|
||||||
bunny-web.site_bundle.crt
|
bunny-web.site_bundle.crt
|
||||||
|
|
|
@ -30,12 +30,6 @@ public class GeneratorController {
|
||||||
|
|
||||||
private final GeneratorService generatorService;
|
private final GeneratorService generatorService;
|
||||||
|
|
||||||
/**
|
|
||||||
* 生成代码
|
|
||||||
*
|
|
||||||
* @param dto 生成参数DTO
|
|
||||||
* @return 生成的代码结果,按表名分组
|
|
||||||
*/
|
|
||||||
@Operation(summary = "生成代码", description = "根据SQL或数据库表生成代码")
|
@Operation(summary = "生成代码", description = "根据SQL或数据库表生成代码")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public Result<Map<String, List<GeneratorVo>>> generator(@Valid @RequestBody VmsArgumentDto dto) {
|
public Result<Map<String, List<GeneratorVo>>> generator(@Valid @RequestBody VmsArgumentDto dto) {
|
||||||
|
@ -48,12 +42,6 @@ public class GeneratorController {
|
||||||
return Result.success(result);
|
return Result.success(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 打包代码为ZIP下载
|
|
||||||
*
|
|
||||||
* @param dto 生成参数DTO
|
|
||||||
* @return ZIP文件响应实体
|
|
||||||
*/
|
|
||||||
@Operation(summary = "打包下载", description = "将生成的代码打包为ZIP文件下载")
|
@Operation(summary = "打包下载", description = "将生成的代码打包为ZIP文件下载")
|
||||||
@PostMapping("downloadByZip")
|
@PostMapping("downloadByZip")
|
||||||
public ResponseEntity<byte[]> downloadByZip(@Valid @RequestBody VmsArgumentDto dto) {
|
public ResponseEntity<byte[]> downloadByZip(@Valid @RequestBody VmsArgumentDto dto) {
|
||||||
|
|
|
@ -30,6 +30,16 @@ public class VmsTBaseTemplateGenerator extends AbstractTemplateGenerator {
|
||||||
this.dto = dto;
|
this.dto = dto;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
this.tableMetaData = tableMetaData;
|
this.tableMetaData = tableMetaData;
|
||||||
|
|
||||||
|
// 处理表名称,替换前缀
|
||||||
|
String tableName = tableMetaData.getTableName();
|
||||||
|
String[] prefixes = dto.getTablePrefixes().split("[,,]");
|
||||||
|
for (String prefix : prefixes) {
|
||||||
|
if (tableName.startsWith(prefix)) {
|
||||||
|
String handlerTableName = tableName.replace(prefix, "");
|
||||||
|
tableMetaData.setCleanTableName(handlerTableName);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,7 +50,7 @@ public class VmsTBaseTemplateGenerator extends AbstractTemplateGenerator {
|
||||||
@Override
|
@Override
|
||||||
public void addContext(VelocityContext context) {
|
public void addContext(VelocityContext context) {
|
||||||
// 当前的表名
|
// 当前的表名
|
||||||
String tableName = tableMetaData.getTableName();
|
String handlerTableName = tableMetaData.getCleanTableName();
|
||||||
// 表的注释内容
|
// 表的注释内容
|
||||||
String comment = tableMetaData.getComment();
|
String comment = tableMetaData.getComment();
|
||||||
|
|
||||||
|
@ -61,11 +71,11 @@ public class VmsTBaseTemplateGenerator extends AbstractTemplateGenerator {
|
||||||
context.put("package", dto.getPackageName());
|
context.put("package", dto.getPackageName());
|
||||||
|
|
||||||
// 将类名称转成小驼峰
|
// 将类名称转成小驼峰
|
||||||
String lowerCamelCase = MysqlTypeConvertUtil.convertToCamelCase(tableName, false);
|
String lowerCamelCase = MysqlTypeConvertUtil.convertToCamelCase(handlerTableName, false);
|
||||||
context.put("classLowercaseName", lowerCamelCase);
|
context.put("classLowercaseName", lowerCamelCase);
|
||||||
|
|
||||||
// 将类名称转成大驼峰
|
// 将类名称转成大驼峰
|
||||||
String upperCameCase = MysqlTypeConvertUtil.convertToCamelCase(tableName, true);
|
String upperCameCase = MysqlTypeConvertUtil.convertToCamelCase(handlerTableName, true);
|
||||||
context.put("classUppercaseName", upperCameCase);
|
context.put("classUppercaseName", upperCameCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@ -13,11 +14,14 @@ import java.util.List;
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Schema(name = "TableMetaData", description = "表信息数据")
|
@Schema(name = "TableMetaData", description = "表信息数据")
|
||||||
public class TableMetaData {
|
public class TableMetaData implements Serializable {
|
||||||
|
|
||||||
@Schema(name = "tableName", description = "表名")
|
@Schema(name = "tableName", description = "表名")
|
||||||
private String tableName;
|
private String tableName;
|
||||||
|
|
||||||
|
@Schema(name = "handlerTableName", description = "处理后的表名称")
|
||||||
|
private String cleanTableName;
|
||||||
|
|
||||||
@Schema(name = "comment", description = "注释内容")
|
@Schema(name = "comment", description = "注释内容")
|
||||||
private String comment;
|
private String comment;
|
||||||
|
|
||||||
|
@ -33,4 +37,5 @@ public class TableMetaData {
|
||||||
@Schema(name = "columns", description = "列名称")
|
@Schema(name = "columns", description = "列名称")
|
||||||
private List<ColumnMetaData> columns = List.of();
|
private List<ColumnMetaData> columns = List.of();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package cn.bunny.service.helper;
|
package cn.bunny.service.helper;
|
||||||
|
|
||||||
import cn.bunny.domain.dto.VmsArgumentDto;
|
|
||||||
import cn.bunny.utils.MysqlTypeConvertUtil;
|
import cn.bunny.utils.MysqlTypeConvertUtil;
|
||||||
import com.google.common.base.CaseFormat;
|
import com.google.common.base.CaseFormat;
|
||||||
|
|
||||||
|
@ -23,36 +22,25 @@ public class VmsGeneratorPathHelper {
|
||||||
/**
|
/**
|
||||||
* 处理模板文件路径和命名
|
* 处理模板文件路径和命名
|
||||||
*
|
*
|
||||||
* @param dto 生成参数
|
|
||||||
* @param path 原始模板路径
|
* @param path 原始模板路径
|
||||||
* @param tableName 数据库表名
|
* @param tableName 数据库表名
|
||||||
* @return 处理后的文件路径
|
* @return 处理后的文件路径
|
||||||
*/
|
*/
|
||||||
public static String processVmPath(VmsArgumentDto dto, String path, String tableName) {
|
public static String processVmPath(String path, String tableName) {
|
||||||
String className = removeTablePrefixes(dto, tableName);
|
|
||||||
String lowerCamelCase = MysqlTypeConvertUtil.convertToCamelCase(tableName, false);
|
String lowerCamelCase = MysqlTypeConvertUtil.convertToCamelCase(tableName, false);
|
||||||
String[] pathParts = path.replace("$className", lowerCamelCase).split("/");
|
|
||||||
|
|
||||||
|
if (lowerCamelCase != null) {
|
||||||
|
String[] pathParts = path.replace("$className", lowerCamelCase).split("/");
|
||||||
// 处理文件名
|
// 处理文件名
|
||||||
pathParts[pathParts.length - 1] = processFilename(
|
pathParts[pathParts.length - 1] = processFilename(
|
||||||
pathParts[pathParts.length - 1],
|
pathParts[pathParts.length - 1],
|
||||||
className
|
lowerCamelCase
|
||||||
);
|
);
|
||||||
|
|
||||||
return String.join("/", pathParts);
|
return String.join("/", pathParts);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
return path;
|
||||||
* 移除表前缀
|
|
||||||
*/
|
|
||||||
private static String removeTablePrefixes(VmsArgumentDto dto, String tableName) {
|
|
||||||
String[] prefixes = dto.getTablePrefixes().split("[,,]");
|
|
||||||
for (String prefix : prefixes) {
|
|
||||||
if (tableName.startsWith(prefix)) {
|
|
||||||
return tableName.substring(prefix.length());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tableName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -56,10 +56,12 @@ public class GeneratorServiceImpl implements GeneratorService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Map<String, List<GeneratorVo>> generateCodeBySql(VmsArgumentDto dto) {
|
public Map<String, List<GeneratorVo>> generateCodeBySql(VmsArgumentDto dto) {
|
||||||
|
// 根据Sql语句进行分析表的属性和表列字段
|
||||||
String sql = dto.getSql();
|
String sql = dto.getSql();
|
||||||
TableMetaData tableMeta = sqlMetadataProvider.getTableMetadata(sql);
|
TableMetaData tableMeta = sqlMetadataProvider.getTableMetadata(sql);
|
||||||
List<ColumnMetaData> columns = sqlMetadataProvider.getColumnInfoList(sql);
|
List<ColumnMetaData> columns = sqlMetadataProvider.getColumnInfoList(sql);
|
||||||
|
|
||||||
|
// 生成代码
|
||||||
List<GeneratorVo> generatorVoList = getGeneratorStream(dto, tableMeta, columns).toList();
|
List<GeneratorVo> generatorVoList = getGeneratorStream(dto, tableMeta, columns).toList();
|
||||||
|
|
||||||
Map<String, List<GeneratorVo>> map = new HashMap<>();
|
Map<String, List<GeneratorVo>> map = new HashMap<>();
|
||||||
|
@ -68,11 +70,23 @@ public class GeneratorServiceImpl implements GeneratorService {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据数据库进行生成
|
||||||
|
*
|
||||||
|
* @param dto 生成参数
|
||||||
|
* @return 生成的ZIP文件
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<byte[]> downloadByZipByDatabase(VmsArgumentDto dto) {
|
public ResponseEntity<byte[]> downloadByZipByDatabase(VmsArgumentDto dto) {
|
||||||
return downloadByZip(dto, this::generateCodeByDatabase);
|
return downloadByZip(dto, this::generateCodeByDatabase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据Sql语句及逆行生成
|
||||||
|
*
|
||||||
|
* @param dto 生成参数
|
||||||
|
* @return 生成的ZIP文件
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<byte[]> downloadByZipBySqL(VmsArgumentDto dto) {
|
public ResponseEntity<byte[]> downloadByZipBySqL(VmsArgumentDto dto) {
|
||||||
return downloadByZip(dto, this::generateCodeBySql);
|
return downloadByZip(dto, this::generateCodeBySql);
|
||||||
|
@ -117,16 +131,22 @@ public class GeneratorServiceImpl implements GeneratorService {
|
||||||
* @return 生成器流
|
* @return 生成器流
|
||||||
*/
|
*/
|
||||||
public Stream<GeneratorVo> getGeneratorStream(VmsArgumentDto dto, TableMetaData tableMeta, List<ColumnMetaData> columns) {
|
public Stream<GeneratorVo> getGeneratorStream(VmsArgumentDto dto, TableMetaData tableMeta, List<ColumnMetaData> columns) {
|
||||||
|
// 因为这里使用到了并行流,对 tableMeta 操作正常是会拿到修改后的值,但是在并行流会有线程安全问题,所以直接要手动实现深拷贝
|
||||||
|
|
||||||
return dto.getPath().parallelStream().map(path -> {
|
return dto.getPath().parallelStream().map(path -> {
|
||||||
|
// 创建生成模板
|
||||||
VmsTBaseTemplateGenerator generator = new VmsTBaseTemplateGenerator(dto, path, tableMeta);
|
VmsTBaseTemplateGenerator generator = new VmsTBaseTemplateGenerator(dto, path, tableMeta);
|
||||||
|
|
||||||
|
// 生成好的模板
|
||||||
String code = generator.generateCode(tableMeta, columns).toString();
|
String code = generator.generateCode(tableMeta, columns).toString();
|
||||||
|
String processVmPath = VmsGeneratorPathHelper.processVmPath(path, tableMeta.getCleanTableName());
|
||||||
|
|
||||||
return GeneratorVo.builder()
|
return GeneratorVo.builder()
|
||||||
.id(UUID.randomUUID().toString())
|
.id(UUID.randomUUID().toString())
|
||||||
.code(code)
|
.code(code)
|
||||||
.comment(tableMeta.getComment())
|
.comment(tableMeta.getComment())
|
||||||
.tableName(tableMeta.getTableName())
|
.tableName(tableMeta.getTableName())
|
||||||
.path(VmsGeneratorPathHelper.processVmPath(dto, path, tableMeta.getTableName()))
|
.path(processVmPath)
|
||||||
.build();
|
.build();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
bunny:
|
||||||
|
master:
|
||||||
|
host: rm-bp12z6hlv46vi6g8mro.mysql.rds.aliyuncs.com
|
||||||
|
port: 3306
|
||||||
|
database: gulimall_pms
|
||||||
|
username: gulimall
|
||||||
|
password: "0212Gulimall"
|
|
@ -95,6 +95,8 @@ const AppGeneratorPage = defineComponent({
|
||||||
* 几秒后恢复原状
|
* 几秒后恢复原状
|
||||||
*/
|
*/
|
||||||
async onCopyToClipboard(code) {
|
async onCopyToClipboard(code) {
|
||||||
|
this.copied = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await navigator.clipboard.writeText(code);
|
await navigator.clipboard.writeText(code);
|
||||||
antd.notification.open({
|
antd.notification.open({
|
||||||
|
@ -119,6 +121,13 @@ const AppGeneratorPage = defineComponent({
|
||||||
document.execCommand('copy');
|
document.execCommand('copy');
|
||||||
document.body.removeChild(textarea);
|
document.body.removeChild(textarea);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 显示已复制图标时长
|
||||||
|
if (this.copied) {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.copied = false;
|
||||||
|
}, 2000)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/* 下载全部文件 */
|
/* 下载全部文件 */
|
||||||
|
|
|
@ -34,6 +34,8 @@ axiosInstance.interceptors.response.use(
|
||||||
} else {
|
} else {
|
||||||
antd.message.error(message || '系统出错');
|
antd.message.error(message || '系统出错');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return error.response.data;
|
||||||
}
|
}
|
||||||
return Promise.reject(error.message);
|
return Promise.reject(error.message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,11 +288,12 @@ const DatabaseForm = {
|
||||||
async onDownloadZip() {
|
async onDownloadZip() {
|
||||||
this.downloadLoading = true;
|
this.downloadLoading = true;
|
||||||
try {
|
try {
|
||||||
|
// 重要:指定响应类型为blob
|
||||||
const response = await axiosInstance({
|
const response = await axiosInstance({
|
||||||
url: "/generator/downloadByZip",
|
url: "/generator/downloadByZip",
|
||||||
method: "POST",
|
method: "POST",
|
||||||
data: this.form,
|
data: this.form,
|
||||||
responseType: 'blob' // 重要:指定响应类型为blob
|
responseType: 'blob'
|
||||||
});
|
});
|
||||||
|
|
||||||
// 从响应头中获取文件名
|
// 从响应头中获取文件名
|
||||||
|
|
|
@ -169,21 +169,32 @@
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
/* 数据表选择 */
|
/* 数据表选择 */
|
||||||
dbSelect: {
|
dbSelect: "getDatabaseTableList",
|
||||||
handler() {
|
|
||||||
this.getDatabaseTableList();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/* 过滤数据表 */
|
/* 过滤数据表 */
|
||||||
tableSelect: {
|
tableSelect(val) {
|
||||||
handler(val) {
|
|
||||||
this.tableList = this.rawTableList;
|
this.tableList = this.rawTableList;
|
||||||
// 根据表名进行过滤筛选或者根据注释内容进行筛选
|
// 根据表名进行过滤筛选或者根据注释内容进行筛选
|
||||||
this.tableList = this.tableList.filter(table => table.tableName.includes(val) || table.comment.includes(val));
|
this.tableList = this.tableList.filter(table => table.tableName.includes(val) || table.comment.includes(val));
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听form表单放到 localStorage
|
||||||
|
* 不要使用 immediate 否则初始话加载的时候会将 localStorage 改成 原始表单
|
||||||
|
*/
|
||||||
|
form: {
|
||||||
|
deep: true,
|
||||||
|
handler(val) {
|
||||||
|
localStorage.setItem("form", JSON.stringify(val));
|
||||||
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
mounted() {
|
||||||
|
const form = localStorage.getItem("form");
|
||||||
|
if (form !== null) {
|
||||||
|
this.form = JSON.parse(form);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 注册组件
|
// 注册组件
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
package ${package}.controller;
|
package ${package}.controller;
|
||||||
|
|
||||||
import cn.bunny.domain.pojo.result.Result;
|
import ${package}.domain.dto.${classUppercaseName}Dto;
|
||||||
import cn.bunny.domain.pojo.result.ResultCodeEnum;
|
import ${package}.domain.entity.${classUppercaseName};
|
||||||
|
import ${package}.domain.vo.${classUppercaseName}Vo;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import reactor.core.publisher.Mono;
|
|
||||||
import cn.bunny.domain.pojo.result.PageResult;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import ${package}.service.${classUppercaseName}Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -21,42 +23,42 @@ import java.util.List;
|
||||||
* @author ${author}
|
* @author ${author}
|
||||||
* @since ${date}
|
* @since ${date}
|
||||||
*/
|
*/
|
||||||
@Tag(name = "${comment}" , description = "${comment}相关接口" )
|
@Tag(name = "${comment}", description = "${comment}相关接口")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("${requestMapping}/${classLowercaseName}" )
|
@RequestMapping("${requestMapping}/${classLowercaseName}")
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class ${classUppercaseName}Controller {
|
public class ${classUppercaseName}Controller {
|
||||||
|
|
||||||
@Resource
|
private final ${classUppercaseName}Service ${classLowercaseName}Service;
|
||||||
private ${classUppercaseName}Service ${classLowercaseName}Service;
|
|
||||||
|
|
||||||
@Operation(summary = "分页查询${comment}" , description = "分页${comment}" )
|
@Operation(summary = "分页查询${comment}", description = "分页${comment}")
|
||||||
@GetMapping("{page}/{limit}" )
|
@GetMapping("{page}/{limit}")
|
||||||
public Result<PageResult<${classUppercaseName}Vo>> get${classUppercaseName}Page(
|
public Result<PageResult<${classUppercaseName}Vo>> get${classUppercaseName}Page(
|
||||||
@Parameter(name = "page" , description = "当前页" , required = true)
|
@Parameter(name = "page", description = "当前页", required = true)
|
||||||
@PathVariable("page" ) Integer page,
|
@PathVariable("page") Integer page,
|
||||||
@Parameter(name = "limit" , description = "每页记录数" , required = true)
|
@Parameter(name = "limit", description = "每页记录数", required = true)
|
||||||
@PathVariable("limit" ) Integer limit,
|
@PathVariable("limit") Integer limit,
|
||||||
${classUppercaseName}Dto dto) {
|
${classUppercaseName}Dto dto) {
|
||||||
Page<${classUppercaseName}> pageParams = new Page<>(page, limit);
|
Page<${classUppercaseName}> pageParams = new Page<>(page, limit);
|
||||||
PageResult<${classUppercaseName}Vo> pageResult = ${classLowercaseName}Service.get${classUppercaseName}Page(pageParams, dto);
|
PageResult<${classUppercaseName}Vo> pageResult = ${classLowercaseName}Service.get${classUppercaseName}Page(pageParams, dto);
|
||||||
return Result.success(pageResult);
|
return Result.success(pageResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "添加${comment}" , description = "添加${comment}" )
|
@Operation(summary = "添加${comment}", description = "添加${comment}")
|
||||||
@PostMapping()
|
@PostMapping()
|
||||||
public Result<String> add${classUppercaseName}(@Valid @RequestBody ${classUppercaseName}to dto) {
|
public Result<String> add${classUppercaseName}(@Valid @RequestBody ${classUppercaseName}Dto dto) {
|
||||||
${classLowercaseName}Service.add${classUppercaseName}(dto);
|
${classLowercaseName}Service.add${classUppercaseName}(dto);
|
||||||
return Result.success(ResultCodeEnum.ADD_SUCCESS);
|
return Result.success(ResultCodeEnum.ADD_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "更新${comment}" , description = "更新${comment}" )
|
@Operation(summary = "更新${comment}", description = "更新${comment}")
|
||||||
@PutMapping()
|
@PutMapping()
|
||||||
public Result<String> update${classUppercaseName}(@Valid @RequestBody ${classUppercaseName}Dto dto) {
|
public Result<String> update${classUppercaseName}(@Valid @RequestBody ${classUppercaseName}Dto dto) {
|
||||||
${classLowercaseName}Service.update${classUppercaseName}(dto);
|
${classLowercaseName}Service.update${classUppercaseName}(dto);
|
||||||
return Result.success(ResultCodeEnum.UPDATE_SUCCESS);
|
return Result.success(ResultCodeEnum.UPDATE_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "删除${comment}" , description = "删除${comment}" )
|
@Operation(summary = "删除${comment}", description = "删除${comment}")
|
||||||
@DeleteMapping()
|
@DeleteMapping()
|
||||||
public Result<String> delete${classUppercaseName}(@RequestBody List<Long> ids) {
|
public Result<String> delete${classUppercaseName}(@RequestBody List<Long> ids) {
|
||||||
${classLowercaseName}Service.delete${classUppercaseName}(ids);
|
${classLowercaseName}Service.delete${classUppercaseName}(ids);
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
package ${package}.domain.dto;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|
|
@ -1,14 +1,22 @@
|
||||||
@EqualsAndHashCode(callSuper = true)
|
package ${package}.domain.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
@TableName("${tableName}")
|
@TableName("${tableName}")
|
||||||
@Schema(name = "${classUppercaseName}对象", title = "${comment}", description = "${comment}的实体类对象")
|
@Schema(name = "${classUppercaseName}对象", title = "${comment}", description = "${comment}的实体类对象")
|
||||||
public class ${classUppercaseName} extends BaseEntity {
|
public class ${classUppercaseName} {
|
||||||
|
|
||||||
#foreach($field in ${columnInfoList})
|
#foreach($field in ${columnInfoList})
|
||||||
@Schema(name = "${field.lowercaseName}", title = "${field.comment}")
|
@Schema(name = "${field.lowercaseName}", title = "${field.comment}")
|
||||||
private ${field.javaType} ${field.lowercaseName};
|
private ${field.javaType} ${field.lowercaseName};
|
||||||
|
|
||||||
#end
|
#end
|
||||||
}
|
}
|
|
@ -1,13 +1,21 @@
|
||||||
|
package ${package}.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Schema(name = "${classUppercaseName}VO对象", title = "${comment}", description = "${comment}的VO对象")
|
@Schema(name = "${classUppercaseName}VO对象", title = "${comment}", description = "${comment}的VO对象")
|
||||||
public class ${classUppercaseName}Vo {
|
public class ${classUppercaseName}Vo {
|
||||||
|
|
||||||
#foreach($field in ${columnInfoList})
|
#foreach($field in ${columnInfoList})
|
||||||
@Schema(name = "${field.lowercaseName}", title = "${field.comment}")
|
@Schema(name = "${field.lowercaseName}", title = "${field.comment}")
|
||||||
private ${field.javaType} ${field.lowercaseName};
|
private ${field.javaType} ${field.lowercaseName};
|
||||||
|
|
||||||
#end
|
#end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import ${package}.domain.dto.${classUppercaseName}Dto;
|
||||||
|
import ${package}.domain.entity.${classUppercaseName};
|
||||||
|
import ${package}.domain.vo.${classUppercaseName}Vo;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -25,6 +30,6 @@ public interface ${classUppercaseName}Mapper extends BaseMapper<${classUppercase
|
||||||
* @param dto ${comment}查询表单
|
* @param dto ${comment}查询表单
|
||||||
* @return ${comment}分页结果
|
* @return ${comment}分页结果
|
||||||
*/
|
*/
|
||||||
IPage<${classUppercaseName}Vo> selectListByPage(@Param("page" ) Page<${classUppercaseName}> pageParams, @Param("dto" ) ${classUppercaseName}Dto dto);
|
IPage<${classUppercaseName}Vo> selectListByPage(@Param("page") Page<${classUppercaseName}> pageParams, @Param("dto") ${classUppercaseName}Dto dto);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<mapper namespace="${package}.mapper.${classUppercaseName}Mapper">
|
<mapper namespace="${package}.mapper.${classUppercaseName}Mapper">
|
||||||
|
|
||||||
<!-- 通用查询映射结果 -->
|
<!-- 通用查询映射结果 -->
|
||||||
<resultMap id="BaseResultMap" type="${classUppercaseName}">
|
<resultMap id="BaseResultMap" type="${package}.domain.entity.${classUppercaseName}">
|
||||||
#foreach($field in ${columnInfoList})
|
#foreach($field in ${columnInfoList})
|
||||||
<id column="${field.columnName}" property="${field.lowercaseName}"/>
|
<id column="${field.columnName}" property="${field.lowercaseName}"/>
|
||||||
#end
|
#end
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<!-- 分页查询${comment}内容 -->
|
<!-- 分页查询${comment}内容 -->
|
||||||
<select id="selectListByPage" resultType="${voClassType}">
|
<select id="selectListByPage" resultType="${package}.domain.vo.${classUppercaseName}Vo">
|
||||||
select
|
select
|
||||||
base.*,
|
base.*,
|
||||||
create_user.username as create_username,
|
create_user.username as create_username,
|
|
@ -1,6 +1,5 @@
|
||||||
package ${package}.service.impl;
|
package ${package}.service.impl;
|
||||||
|
|
||||||
import cn.bunny.domain.pojo.result.PageResult;
|
|
||||||
import ${package}.mapper.${classUppercaseName}Mapper;
|
import ${package}.mapper.${classUppercaseName}Mapper;
|
||||||
import ${package}.service.${classUppercaseName}Service;
|
import ${package}.service.${classUppercaseName}Service;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
@ -8,6 +7,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import ${package}.service.${classUppercaseName}Service;
|
||||||
|
import ${package}.domain.dto.${classUppercaseName}Dto;
|
||||||
|
import ${package}.domain.entity.${classUppercaseName};
|
||||||
|
import ${package}.domain.vo.${classUppercaseName}Vo;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -20,6 +24,7 @@ import java.util.List;
|
||||||
* @since ${date}
|
* @since ${date}
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@Transactional
|
||||||
public class ${classUppercaseName}ServiceImpl extends ServiceImpl<${classUppercaseName}Mapper, ${classUppercaseName}> implements ${classUppercaseName}Service {
|
public class ${classUppercaseName}ServiceImpl extends ServiceImpl<${classUppercaseName}Mapper, ${classUppercaseName}> implements ${classUppercaseName}Service {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,7 +52,7 @@ public class ${classUppercaseName}ServiceImpl extends ServiceImpl<${classUpperca
|
||||||
* @param dto ${comment}添加
|
* @param dto ${comment}添加
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void add${classUppercaseName}(@Valid ${classUppercaseName}AddDto dto) {
|
public void add${classUppercaseName}(${classUppercaseName}Dto dto) {
|
||||||
${classUppercaseName} ${classLowercaseName} =new ${classUppercaseName}();
|
${classUppercaseName} ${classLowercaseName} =new ${classUppercaseName}();
|
||||||
BeanUtils.copyProperties(dto, ${classLowercaseName});
|
BeanUtils.copyProperties(dto, ${classLowercaseName});
|
||||||
save(${classLowercaseName});
|
save(${classLowercaseName});
|
||||||
|
@ -59,7 +64,7 @@ public class ${classUppercaseName}ServiceImpl extends ServiceImpl<${classUpperca
|
||||||
* @param dto ${comment}更新
|
* @param dto ${comment}更新
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void update${classUppercaseName}(@Valid ${classUppercaseName}UpdateDto dto) {
|
public void update${classUppercaseName}(${classUppercaseName}Dto dto) {
|
||||||
${classUppercaseName} ${classLowercaseName} =new ${classUppercaseName}();
|
${classUppercaseName} ${classLowercaseName} =new ${classUppercaseName}();
|
||||||
BeanUtils.copyProperties(dto, ${classLowercaseName});
|
BeanUtils.copyProperties(dto, ${classLowercaseName});
|
||||||
updateById(${classLowercaseName});
|
updateById(${classLowercaseName});
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
package ${package}.service;
|
package ${package}.service;
|
||||||
|
|
||||||
import cn.bunny.domain.entity.system.MenuIcon;
|
|
||||||
import cn.bunny.domain.pojo.result.PageResult;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import jakarta.validation.Valid;
|
import ${package}.domain.dto.${classUppercaseName}Dto;
|
||||||
|
import ${package}.domain.entity.${classUppercaseName};
|
||||||
|
import ${package}.domain.vo.${classUppercaseName}Vo;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -28,16 +29,16 @@ public interface ${classUppercaseName}Service extends IService<${classUppercaseN
|
||||||
/**
|
/**
|
||||||
* 添加${comment}
|
* 添加${comment}
|
||||||
*
|
*
|
||||||
* @param dto 添加表单
|
* @param dto {@link ${classUppercaseName}Dto} 添加表单
|
||||||
*/
|
*/
|
||||||
void add${classUppercaseName}(${classUppercaseName}AddDto dto);
|
void add${classUppercaseName}(${classUppercaseName}Dto dto);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新${comment}
|
* 更新${comment}
|
||||||
*
|
*
|
||||||
* @param dto {@link ${classUppercaseName}UpdateDto}
|
* @param dto {@link ${classUppercaseName}Dto} 更新表单
|
||||||
*/
|
*/
|
||||||
void update${classUppercaseName}(${classUppercaseName}UpdateDto dto);
|
void update${classUppercaseName}(${classUppercaseName}Dto dto);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除|批量删除${comment}类型
|
* 删除|批量删除${comment}类型
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.mall.common.domain.vo.result;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 封装分页查询结果
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Schema(name = "PageResult 对象", title = "分页返回结果", description = "分页返回结果")
|
||||||
|
public class PageResult<T> implements Serializable {
|
||||||
|
|
||||||
|
@Schema(name = "pageNo", title = "当前页")
|
||||||
|
private Long pageNo;
|
||||||
|
|
||||||
|
@Schema(name = "pageSize", title = "每页记录数")
|
||||||
|
private Long pageSize;
|
||||||
|
|
||||||
|
@Schema(name = "total", title = "总记录数")
|
||||||
|
private Long total;
|
||||||
|
|
||||||
|
@Schema(name = "list", title = "当前页数据集合")
|
||||||
|
private List<T> list;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,173 @@
|
||||||
|
package com.mall.common.domain.vo.result;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Result<T> {
|
||||||
|
// 状态码
|
||||||
|
private Integer code;
|
||||||
|
// 返回消息
|
||||||
|
private String message;
|
||||||
|
// 返回数据
|
||||||
|
private T data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 自定义返回体
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @return Result<T>
|
||||||
|
*/
|
||||||
|
protected static <T> Result<T> build(T data) {
|
||||||
|
Result<T> result = new Result<>();
|
||||||
|
result.setData(data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 自定义返回体,使用ResultCodeEnum构建
|
||||||
|
*
|
||||||
|
* @param body 返回体
|
||||||
|
* @param codeEnum 返回状态码
|
||||||
|
* @return Result<T>
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> build(T body, ResultCodeEnum codeEnum) {
|
||||||
|
Result<T> result = build(body);
|
||||||
|
result.setCode(codeEnum.getCode());
|
||||||
|
result.setMessage(codeEnum.getMessage());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 自定义返回体
|
||||||
|
*
|
||||||
|
* @param body 返回体
|
||||||
|
* @param code 返回状态码
|
||||||
|
* @param message 返回消息
|
||||||
|
* @return Result<T>
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> build(T body, Integer code, String message) {
|
||||||
|
Result<T> result = build(body);
|
||||||
|
result.setCode(code);
|
||||||
|
result.setMessage(message);
|
||||||
|
result.setData(null);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作成功
|
||||||
|
*
|
||||||
|
* @return Result<T>
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success() {
|
||||||
|
return success(null, ResultCodeEnum.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作成功
|
||||||
|
*
|
||||||
|
* @param data baseCategory1List
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(T data) {
|
||||||
|
return build(data, ResultCodeEnum.SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作成功-状态码
|
||||||
|
*
|
||||||
|
* @param codeEnum 状态码
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(ResultCodeEnum codeEnum) {
|
||||||
|
return success(null, codeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作成功-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param codeEnum 状态码
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(T data, ResultCodeEnum codeEnum) {
|
||||||
|
return build(data, codeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param message 错误信息
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(T data, String message) {
|
||||||
|
return build(data, 200, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param code 状态码
|
||||||
|
* @param message 错误信息
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> success(T data, Integer code, String message) {
|
||||||
|
return build(data, code, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error() {
|
||||||
|
return Result.build(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(T data) {
|
||||||
|
return build(data, ResultCodeEnum.FAIL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-状态码
|
||||||
|
*
|
||||||
|
* @param codeEnum 状态码
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(ResultCodeEnum codeEnum) {
|
||||||
|
return build(null, codeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param codeEnum 状态码
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(T data, ResultCodeEnum codeEnum) {
|
||||||
|
return build(data, codeEnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param code 状态码
|
||||||
|
* @param message 错误信息
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(T data, Integer code, String message) {
|
||||||
|
return build(data, code, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 操作失败-自定义返回数据和状态码
|
||||||
|
*
|
||||||
|
* @param data 返回体
|
||||||
|
* @param message 错误信息
|
||||||
|
*/
|
||||||
|
public static <T> Result<T> error(T data, String message) {
|
||||||
|
return build(null, 500, message);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
package com.mall.common.domain.vo.result;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一返回结果状态信息类
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum ResultCodeEnum {
|
||||||
|
// 成功操作 200
|
||||||
|
SUCCESS(200, "操作成功"),
|
||||||
|
LOAD_FINISHED(200, "加载完成"),
|
||||||
|
ADD_SUCCESS(200, "添加成功"),
|
||||||
|
UPDATE_SUCCESS(200, "修改成功"),
|
||||||
|
DELETE_SUCCESS(200, "删除成功"),
|
||||||
|
SORT_SUCCESS(200, "排序成功"),
|
||||||
|
SUCCESS_UPLOAD(200, "上传成功"),
|
||||||
|
SUCCESS_LOGOUT(200, "退出成功"),
|
||||||
|
EMAIL_CODE_REFRESH(200, "邮箱验证码已刷新"),
|
||||||
|
EMAIL_CODE_SEND_SUCCESS(200, "邮箱验证码已发送"),
|
||||||
|
|
||||||
|
// 验证错误 201
|
||||||
|
USERNAME_OR_PASSWORD_NOT_EMPTY(201, "用户名或密码不能为空"),
|
||||||
|
EMAIL_CODE_NOT_EMPTY(201, "邮箱验证码不能为空"),
|
||||||
|
SEND_EMAIL_CODE_NOT_EMPTY(201, "请先发送邮箱验证码"),
|
||||||
|
EMAIL_CODE_NOT_MATCHING(201, "邮箱验证码不匹配"),
|
||||||
|
LOGIN_ERROR(500, "账号或密码错误"),
|
||||||
|
LOGIN_ERROR_USERNAME_PASSWORD_NOT_EMPTY(201, "登录信息不能为空"),
|
||||||
|
GET_BUCKET_EXCEPTION(201, "获取文件信息失败"),
|
||||||
|
SEND_MAIL_CODE_ERROR(201, "邮件发送失败"),
|
||||||
|
EMAIL_CODE_EMPTY(201, "邮箱验证码过期或不存在"),
|
||||||
|
EMAIL_EXIST(201, "邮箱已存在"),
|
||||||
|
REQUEST_IS_EMPTY(201, "请求数据为空"),
|
||||||
|
DATA_TOO_LARGE(201, "请求数据为空"),
|
||||||
|
UPDATE_NEW_PASSWORD_SAME_AS_OLD_PASSWORD(201, "新密码与密码相同"),
|
||||||
|
|
||||||
|
// 数据相关 206
|
||||||
|
ILLEGAL_REQUEST(206, "非法请求"),
|
||||||
|
REPEAT_SUBMIT(206, "重复提交"),
|
||||||
|
DATA_ERROR(206, "数据异常"),
|
||||||
|
EMAIL_USER_TEMPLATE_IS_EMPTY(206, "邮件模板为空"),
|
||||||
|
EMAIL_TEMPLATE_IS_EMPTY(206, "邮件模板为空"),
|
||||||
|
EMAIL_USER_IS_EMPTY(206, "关联邮件用户配置为空"),
|
||||||
|
DATA_EXIST(206, "数据已存在"),
|
||||||
|
DATA_NOT_EXIST(206, "数据不存在"),
|
||||||
|
ALREADY_USER_EXCEPTION(206, "用户已存在"),
|
||||||
|
USER_IS_EMPTY(206, "用户不存在"),
|
||||||
|
FILE_NOT_EXIST(206, "文件不存在"),
|
||||||
|
NEW_PASSWORD_SAME_OLD_PASSWORD(206, "新密码不能和旧密码相同"),
|
||||||
|
MISSING_TEMPLATE_FILES(206, "缺少模板文件"),
|
||||||
|
|
||||||
|
// 身份过期 208
|
||||||
|
LOGIN_AUTH(208, "请先登陆"),
|
||||||
|
AUTHENTICATION_EXPIRED(208, "身份验证过期"),
|
||||||
|
SESSION_EXPIRATION(208, "会话过期"),
|
||||||
|
|
||||||
|
// 209
|
||||||
|
THE_SAME_USER_HAS_LOGGED_IN(209, "相同用户已登录"),
|
||||||
|
|
||||||
|
// 提示错误
|
||||||
|
UPDATE_ERROR(216, "修改失败"),
|
||||||
|
URL_ENCODE_ERROR(216, "URL编码失败"),
|
||||||
|
ILLEGAL_CALLBACK_REQUEST_ERROR(217, "非法回调请求"),
|
||||||
|
FETCH_USERINFO_ERROR(219, "获取用户信息失败"),
|
||||||
|
ILLEGAL_DATA_REQUEST(219, "非法数据请求"),
|
||||||
|
CLASS_NOT_FOUND(219, "类名不存在"),
|
||||||
|
ADMIN_ROLE_CAN_NOT_DELETED(219, "无法删除admin角色"),
|
||||||
|
ROUTER_RANK_NEED_LARGER_THAN_THE_PARENT(219, "设置路由等级需要大于或等于父级的路由等级"),
|
||||||
|
|
||||||
|
// 无权访问 403
|
||||||
|
FAIL_NO_ACCESS_DENIED(403, "无权访问"),
|
||||||
|
FAIL_NO_ACCESS_DENIED_USER_OFFLINE(403, "用户强制下线"),
|
||||||
|
TOKEN_PARSING_FAILED(403, "token解析失败"),
|
||||||
|
FAIL_NO_ACCESS_DENIED_USER_LOCKED(403, "该账户已封禁"),
|
||||||
|
|
||||||
|
// 系统错误 500
|
||||||
|
UNKNOWN_EXCEPTION(500, "服务异常"),
|
||||||
|
SERVICE_ERROR(500, "服务异常"),
|
||||||
|
UPLOAD_ERROR(500, "上传失败"),
|
||||||
|
FAIL(500, "失败"),
|
||||||
|
;
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
private final String message;
|
||||||
|
|
||||||
|
ResultCodeEnum(Integer code, String message) {
|
||||||
|
this.code = code;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue