feat(common): 新增基础模块及AI项目初始化功能

- 新增基础响应类BaseResponse,实现统一返回格式
- 定义自定义异常BusinessException及全局异常处理机制
- 构建错误码枚举ErrorCode,包含常见HTTP及业务错误码
- 实现返回工具类ResultUtils提供成功与失败响应构建方法
- 添加分页查询支持PageQuery和TableDataInfo数据结构
- 配置MinIO客户端及服务类MinioFileService实现文件上传、下载、删除功能
- 实现AI项目初始化控制器ProjectInitController,支持文本、文件及URL输入生成项目结构化数据
- 定义项目初始化相关DTO,包括请求参数和复杂的结果结构体
- 补充项目开发环境配置文件,集成Spring AI、PostgreSQL和MinIO配置
- 项目主启动类YlhpAiProjectManagerApplication添加启动入口
- 更新Maven依赖,集成Spring AI、MyBatis Plus、MinIO及AWS S3客户端依赖
- 规范代码包结构,新增多模块package-info.java文件进行模块说明文档编写
This commit is contained in:
2026-03-26 16:50:18 +08:00
parent 9b840f887d
commit e82b5c2f0b
26 changed files with 1463 additions and 3 deletions

View File

@@ -0,0 +1,81 @@
package cn.yinlihupo.common.page;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 分页查询实体类
*/
@Data
public class PageQuery implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 分页大小
*/
private Integer pageSize;
/**
* 当前页数
*/
private Integer pageNum;
/**
* 排序列
*/
private String orderByColumn;
/**
* 排序的方向desc或者asc
*/
private String isAsc;
/**
* 当前记录起始索引 默认值
*/
public static final int DEFAULT_PAGE_NUM = 1;
/**
* 每页显示记录数 默认值 默认查全部
*/
public static final int DEFAULT_PAGE_SIZE = 10;
public <T> Page<T> build() {
Integer pageNum = this.pageNum == null ? DEFAULT_PAGE_NUM : this.pageNum;
Integer pageSize = this.pageSize == null ? DEFAULT_PAGE_SIZE : this.pageSize;
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE_NUM;
}
return new Page<>(pageNum, pageSize);
}
/**
* 构建排序
*/
public List<OrderItem> buildOrderItem() {
if (orderByColumn == null || orderByColumn.isEmpty() || isAsc == null || isAsc.isEmpty()) {
return null;
}
List<OrderItem> list = new ArrayList<>();
String[] orderByArr = orderByColumn.split(",");
String[] isAscArr = isAsc.split(",");
for (int i = 0; i < orderByArr.length; i++) {
String orderByStr = orderByArr[i].trim();
String isAscStr = isAscArr.length == 1 ? isAscArr[0].trim() : isAscArr[i].trim();
if ("asc".equalsIgnoreCase(isAscStr)) {
list.add(OrderItem.asc(orderByStr));
} else if ("desc".equalsIgnoreCase(isAscStr)) {
list.add(OrderItem.desc(orderByStr));
}
}
return list;
}
}

View File

@@ -0,0 +1,76 @@
package cn.yinlihupo.common.page;
import cn.hutool.http.HttpStatus;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* 表格分页数据对象
*/
@Data
@NoArgsConstructor
public class TableDataInfo<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 总记录数
*/
private long total;
/**
* 列表数据
*/
private List<T> rows;
/**
* 消息状态码
*/
private int code;
/**
* 消息内容
*/
private String msg;
/**
* 分页
*
* @param list 列表数据
* @param total 总记录数
*/
public TableDataInfo(List<T> list, long total) {
this.rows = list;
this.total = total;
}
public static <T> TableDataInfo<T> build(IPage<T> page) {
TableDataInfo<T> rspData = new TableDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
rspData.setMsg("查询成功");
rspData.setRows(page.getRecords());
rspData.setTotal(page.getTotal());
return rspData;
}
public static <T> TableDataInfo<T> build(List<T> list) {
TableDataInfo<T> rspData = new TableDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
rspData.setMsg("查询成功");
rspData.setRows(list);
rspData.setTotal(list.size());
return rspData;
}
public static <T> TableDataInfo<T> build() {
TableDataInfo<T> rspData = new TableDataInfo<>();
rspData.setCode(HttpStatus.HTTP_OK);
rspData.setMsg("查询成功");
return rspData;
}
}