diff --git a/flx-ai/pom.xml b/flx-ai/pom.xml index 511f3df..6643cdd 100644 --- a/flx-ai/pom.xml +++ b/flx-ai/pom.xml @@ -81,7 +81,7 @@ org.postgresql postgresql - runtime + com.alibaba @@ -93,6 +93,11 @@ mybatis-plus-boot-starter ${mybatisplus.version} + + org.mybatis + mybatis-typehandlers-jsr310 + 1.0.2 + cn.hutool hutool-all @@ -123,6 +128,16 @@ fastjson ${fastjson.version} + + com.fasterxml.jackson.core + jackson-databind + 2.13.4 + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.13.4 + io.springfox springfox-boot-starter diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/FilesController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/FilesController.java new file mode 100644 index 0000000..19c259c --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/FilesController.java @@ -0,0 +1,105 @@ +package com.pjilisense.flxai.controller; + +import com.alibaba.fastjson.JSONObject; +import com.pjilisense.flxai.base.constant.Constant; +import com.pjilisense.flxai.page.PageData; +import com.pjilisense.flxai.utils.Result; +import com.pjilisense.flxai.dto.FilesDTO; +import com.pjilisense.flxai.service.FilesService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.ibatis.type.JdbcType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@RestController +@RequestMapping(Constant.BASE_PATH+"files") +@Api(tags="${comments}") +public class FilesController { + + private static Logger logger = LoggerFactory.getLogger(FilesController.class); + + @Autowired + private FilesService filesService; + + @GetMapping("page") + @ApiOperation("分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="Integer", dataTypeClass =Integer.class) , + @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="Integer", dataTypeClass =Integer.class) , + @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String", dataTypeClass =String.class) , + @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String", dataTypeClass =String.class) + }) + public Result> page(@ApiIgnore @RequestParam Map params){ + PageData page = filesService.page(params); + return new Result>().ok(page); + } + + @GetMapping("{id}") + @ApiOperation("信息") + public Result get(@PathVariable("id") String id){ + FilesDTO data = filesService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @ApiOperation("保存") + public Result save(@RequestBody FilesDTO dto){ + //@RequestBody JSONObject object + //FilesDTO dto = object.toJavaObject(FilesDTO.class); + filesService.save(dto); + return new Result().ok(dto); + } + + @PostMapping("/modifyFileName") + @ApiOperation("修改文件名") + public Result modifyFileName(@RequestBody FilesDTO dto){ + boolean suc =filesService.modifyFileName(dto); + return new Result().ok(suc); + } + @PostMapping("/modifyFileStatus") + @ApiOperation("修改文件状态") + public Result modifyFileStatus(@RequestBody FilesDTO dto){ + boolean suc =filesService.modifyFileStatus(dto); + return new Result().ok(suc); + } + @PostMapping("/modifyFileCategory") + @ApiOperation("修改文件分类") + public Result modifyFileCategory(@RequestBody FilesDTO dto){ + boolean suc =filesService.modifyFileCategory(dto); + return new Result().ok(suc); + } + @PutMapping + @ApiOperation("修改") + public Result update(@RequestBody FilesDTO dto){ + filesService.update(dto); + + return new Result().ok(dto); + } + + @DeleteMapping + @ApiOperation("删除") + public Result delete(@RequestBody String[] ids){ + filesService.delete(ids); + + return new Result(); + } + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/KnowledgeBasesController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/KnowledgeBasesController.java new file mode 100644 index 0000000..639256f --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/KnowledgeBasesController.java @@ -0,0 +1,92 @@ +package com.pjilisense.flxai.controller; + +import com.pjilisense.flxai.base.constant.Constant; +import com.pjilisense.flxai.dto.FilesDTO; +import com.pjilisense.flxai.page.PageData; +import com.pjilisense.flxai.utils.Result; +import com.pjilisense.flxai.dto.KnowledgeBasesDTO; +import com.pjilisense.flxai.service.KnowledgeBasesService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@RestController +@RequestMapping(Constant.BASE_PATH+"knowledgebases") +@Api(tags="${comments}") +public class KnowledgeBasesController { + + private static Logger logger = LoggerFactory.getLogger(KnowledgeBasesController.class); + + @Autowired + private KnowledgeBasesService knowledgeBasesService; + + @GetMapping("page") + @ApiOperation("分页") + @ApiImplicitParams({ + @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="Integer", dataTypeClass =Integer.class) , + @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="Integer", dataTypeClass =Integer.class) , + @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String", dataTypeClass =String.class) , + @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String", dataTypeClass =String.class) + }) + public Result> page(@ApiIgnore @RequestParam Map params){ + PageData page = knowledgeBasesService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @ApiOperation("信息") + public Result get(@PathVariable("id") String id){ + KnowledgeBasesDTO data = knowledgeBasesService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @ApiOperation("保存") + public Result save(@RequestBody KnowledgeBasesDTO dto){ + knowledgeBasesService.save(dto); + + return new Result().ok(dto); + } + @PostMapping("/modifyDescriptuon") + @ApiOperation("修改描述") + public Result modifyDescriptuon(@RequestBody KnowledgeBasesDTO dto){ + boolean suc =knowledgeBasesService.modifyDescriptuon(dto); + return new Result().ok(suc); + } + @PutMapping + @ApiOperation("修改") + public Result update(@RequestBody KnowledgeBasesDTO dto){ + + knowledgeBasesService.update(dto); + + return new Result().ok(dto); + } + + @DeleteMapping + @ApiOperation("删除") + public Result delete(@RequestBody String[] ids){ + knowledgeBasesService.delete(ids); + + return new Result(); + } + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dao/FilesDao.java b/flx-ai/src/main/java/com/pjilisense/flxai/dao/FilesDao.java new file mode 100644 index 0000000..30764b6 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dao/FilesDao.java @@ -0,0 +1,23 @@ +package com.pjilisense.flxai.dao; + +import com.pjilisense.flxai.base.dao.BaseDao; +import com.pjilisense.flxai.entity.FilesEntity; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@Mapper +public interface FilesDao extends BaseDao { + + int modifyFileName(Map objectToMap); + + int modifyFileStatus(Map objectToMap); + + int modifyFileCategory(Map objectToMap); +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dao/KnowledgeBasesDao.java b/flx-ai/src/main/java/com/pjilisense/flxai/dao/KnowledgeBasesDao.java new file mode 100644 index 0000000..d168246 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dao/KnowledgeBasesDao.java @@ -0,0 +1,19 @@ +package com.pjilisense.flxai.dao; + +import com.pjilisense.flxai.base.dao.BaseDao; +import com.pjilisense.flxai.entity.KnowledgeBasesEntity; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@Mapper +public interface KnowledgeBasesDao extends BaseDao { + + int modifyDescriptuon(Map map); +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dto/FilesDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/FilesDTO.java new file mode 100644 index 0000000..ddf3a76 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/FilesDTO.java @@ -0,0 +1,66 @@ +package com.pjilisense.flxai.dto; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.OffsetDateTime; +import java.util.Date; +import java.util.Map; +import java.util.UUID; + + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@Data +@ApiModel(value = "文件") +public class FilesDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private String id; + + private String userId; + + private String fileType; + + private String name; + + private Integer size; + + private String url; + + private Map metadata; + + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime createdAt; + + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime updatedAt; + + private String fileHash; + + private UUID chunkTaskId; + + private UUID embeddingTaskId; + + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime accessedAt; + + @ApiModelProperty(value = "文件分类1文档2问答") + private String fileCategory; + + @ApiModelProperty(value = "文件状态0删除1没有删除") + private String fileStatus; + + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dto/KnowledgeBasesDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/KnowledgeBasesDTO.java new file mode 100644 index 0000000..feb431c --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/KnowledgeBasesDTO.java @@ -0,0 +1,55 @@ +package com.pjilisense.flxai.dto; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.OffsetDateTime; +import java.util.Date; +import java.util.Map; + + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@Data +@ApiModel(value = "知识库") +public class KnowledgeBasesDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private String id; + + private String name; + + private String description; + + private String avatar; + + private String type; + + private String userId; + + private Boolean isPublic; + + private Map settings; + + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime createdAt; + + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime updatedAt; + + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime accessedAt; + + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/entity/FilesEntity.java b/flx-ai/src/main/java/com/pjilisense/flxai/entity/FilesEntity.java new file mode 100644 index 0000000..d0827a9 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/entity/FilesEntity.java @@ -0,0 +1,87 @@ +package com.pjilisense.flxai.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.pjilisense.flxai.handle.JsonbTypeHandler; +import com.pjilisense.flxai.handle.UUIDTypeHandler; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.Date; +import java.util.Map; +import java.util.UUID; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@Data +@TableName(value = "files", autoResultMap = true) +public class FilesEntity { + + /** + * $column.comments + */ + private String id; + /** + * $column.comments + */ + private String userId; + /** + * $column.comments + */ + private String fileType; + /** + * $column.comments + */ + private String name; + /** + * $column.comments + */ + private Integer size; + /** + * $column.comments + */ + private String url; + /** + * $column.comments + */ + @TableField(value = "metadata", typeHandler = JsonbTypeHandler.class) + private Map metadata; + /** + * $column.comments + */ + private OffsetDateTime createdAt; + /** + * $column.comments + */ + private OffsetDateTime updatedAt; + /** + * $column.comments + */ + private String fileHash; + /** + * $column.comments + */ + @TableField(typeHandler = UUIDTypeHandler.class) + private UUID chunkTaskId; + /** + * $column.comments + */ + @TableField(typeHandler = UUIDTypeHandler.class) + private UUID embeddingTaskId; + /** + * $column.comments + */ + private OffsetDateTime accessedAt; + /** + * 文件分类1文档2问答 + */ + private String fileCategory; + /** + * 文件状态0删除1没有删除 + */ + private String fileStatus; +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/entity/KnowledgeBasesEntity.java b/flx-ai/src/main/java/com/pjilisense/flxai/entity/KnowledgeBasesEntity.java new file mode 100644 index 0000000..d221e5b --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/entity/KnowledgeBasesEntity.java @@ -0,0 +1,67 @@ +package com.pjilisense.flxai.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.pjilisense.flxai.handle.JsonbTypeHandler; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.Date; +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@Data +@TableName("knowledge_bases") +public class KnowledgeBasesEntity { + + /** + * $column.comments + */ + private String id; + /** + * $column.comments + */ + private String name; + /** + * $column.comments + */ + private String description; + /** + * $column.comments + */ + private String avatar; + /** + * $column.comments + */ + private String type; + /** + * $column.comments + */ + private String userId; + /** + * $column.comments + */ + private Boolean isPublic; + /** + * $column.comments + */ + @TableField(value = "settings", typeHandler = JsonbTypeHandler.class) + private Map settings; + /** + * $column.comments + */ + private OffsetDateTime createdAt; + /** + * $column.comments + */ + private OffsetDateTime updatedAt; + /** + * $column.comments + */ + private OffsetDateTime accessedAt; +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/handle/JsonbTypeHandler.java b/flx-ai/src/main/java/com/pjilisense/flxai/handle/JsonbTypeHandler.java new file mode 100644 index 0000000..3fefd78 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/handle/JsonbTypeHandler.java @@ -0,0 +1,46 @@ +package com.pjilisense.flxai.handle; + +import com.alibaba.fastjson.JSON; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedTypes; +import org.postgresql.util.PGobject; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * @author CSDN @一碗情深 + * @description PostgreSql jsonb 数据处理器 + **/ +@MappedTypes({Object.class}) +public class JsonbTypeHandler extends BaseTypeHandler { + private static final PGobject jsonObject = new PGobject(); + + @Override + public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException { + if (preparedStatement != null) { + jsonObject.setType("jsonb"); + jsonObject.setValue(JSON.toJSONString(o)); + preparedStatement.setObject(i, jsonObject); + } + } + + @Override + public Object getNullableResult(ResultSet resultSet, String s) throws SQLException { + return JSON.parse(resultSet.getString(s)); + } + + @Override + public Object getNullableResult(ResultSet resultSet, int i) throws SQLException { + return JSON.parse(resultSet.getString(i)); + } + + @Override + public Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException { + return JSON.parse(callableStatement.getString(i)); + } +} + diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/handle/UUIDArrTypeHandler.java b/flx-ai/src/main/java/com/pjilisense/flxai/handle/UUIDArrTypeHandler.java new file mode 100644 index 0000000..9383543 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/handle/UUIDArrTypeHandler.java @@ -0,0 +1,97 @@ +package com.pjilisense.flxai.handle; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * UUID数组类型处理器 + */ +public class UUIDArrTypeHandler extends BaseTypeHandler> { + + /** + * 设置参数 + * + * @param ps PreparedStatement 对象 + * @param i 参数索引 + * @param parameter UUID 列表 + * @param jdbcType JDBC 类型 + * @throws SQLException SQL异常 + */ + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + if (parameter != null) { + Array array = ps.getConnection().createArrayOf("uuid", parameter.toArray()); + ps.setArray(i, array); + } else { + ps.setNull(i, Types.ARRAY); + } + } + + + /** + * 获取结果 + * + * @param resultSet 结果集 + * @param columnName 列名 + * @return UUID 列表 + * @throws SQLException SQL异常 + */ + @Override + public List getNullableResult(ResultSet resultSet, String columnName) throws SQLException { + return getUUIDList(resultSet.getArray(columnName)); + } + + + /** + * 获取结果 + * + * @param rs 结果集 + * @param columnIndex 列索引 + * @return UUID 列表 + * @throws SQLException SQL异常 + */ + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return getUUIDList(rs.getArray(columnIndex)); + } + + + /** + * 获取结果 + * + * @param cs CallableStatement 对象 + * @param columnIndex 列索引 + * @return UUID 列表 + * @throws SQLException SQL异常 + */ + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return getUUIDList(cs.getArray(columnIndex)); + } + + + /** + * 获取 UUID 列表 + * + * @param array SQL 数组对象 + * @return UUID 列表 + * @throws SQLException SQL异常 + */ + private List getUUIDList(Array array) throws SQLException { + if (array == null) { + return null; + } + Object[] uuidArray = (Object[]) array.getArray(); + List result = new ArrayList<>(); + for (Object obj : uuidArray) { + result.add((UUID) obj); + } + return result; + } +} + diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/handle/UUIDTypeHandler.java b/flx-ai/src/main/java/com/pjilisense/flxai/handle/UUIDTypeHandler.java new file mode 100644 index 0000000..f4a5db7 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/handle/UUIDTypeHandler.java @@ -0,0 +1,97 @@ +package com.pjilisense.flxai.handle; + +import org.apache.ibatis.type.BaseTypeHandler; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.UUID; + +/** + * UUID类型处理器 + */ +public class UUIDTypeHandler extends BaseTypeHandler { + + /** + * 获取结果 + * + * @param resultSet resultSet + * @param columnName 列名 + * @return UUID结果 + * @throws SQLException SQL异常 + */ + @Override + public UUID getNullableResult(ResultSet resultSet, String columnName) + throws SQLException { + return getValue(resultSet.getString(columnName)); + } + + + /** + * 获取结果 + * + * @param rs 结果集 + * @param columnIndex 列下标 + * @return UUID结果 + * @throws SQLException SQL异常 + */ + @Override + public UUID getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return getValue(rs.getString(columnIndex)); + } + + + /** + * 获取结果 + * + * @param cs cs + * @param columnIndex 列下标 + * @return 返回UUID结果 + * @throws SQLException SQL异常 + */ + @Override + public UUID getNullableResult(CallableStatement cs, int columnIndex) + throws SQLException { + return getValue(cs.getString(columnIndex)); + } + + + /** + * 设置参数 + * + * @param ps ps + * @param i i + * @param parameter 参数 + * @param jdbcType jdbc类型 + * @throws SQLException SQL异常 + */ + @Override + public void setNonNullParameter(PreparedStatement ps, int i, UUID parameter, org.apache.ibatis.type.JdbcType jdbcType) throws SQLException { + if (ps != null) { + ps.setObject(i, parameter); + } + } + + /** + * 获取结果 + * + * @param str 传参字符串 + * @return 返回UUID结果 + */ + private UUID getValue(String str) { + return notNull(str) ? UUID.fromString(str) : null; + } + + + /** + * 非空判断 + * + * @param arg 参数 + * @return 判断是否不为空 + */ + private boolean notNull(String arg) { + return (null != arg && !arg.isEmpty()); + } +} + diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/FilesService.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/FilesService.java new file mode 100644 index 0000000..65809ce --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/FilesService.java @@ -0,0 +1,19 @@ +package com.pjilisense.flxai.service; + +import com.pjilisense.flxai.base.service.CrudService; +import com.pjilisense.flxai.dto.FilesDTO; +import com.pjilisense.flxai.entity.FilesEntity; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +public interface FilesService extends CrudService { + boolean modifyFileName(FilesDTO dto); + + boolean modifyFileStatus(FilesDTO dto); + + boolean modifyFileCategory(FilesDTO dto); +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/KnowledgeBasesService.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/KnowledgeBasesService.java new file mode 100644 index 0000000..bfd7223 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/KnowledgeBasesService.java @@ -0,0 +1,16 @@ +package com.pjilisense.flxai.service; + +import com.pjilisense.flxai.base.service.CrudService; +import com.pjilisense.flxai.dto.KnowledgeBasesDTO; +import com.pjilisense.flxai.entity.KnowledgeBasesEntity; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +public interface KnowledgeBasesService extends CrudService { + + boolean modifyDescriptuon(KnowledgeBasesDTO dto); +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/FilesServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/FilesServiceImpl.java new file mode 100644 index 0000000..38cfa54 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/FilesServiceImpl.java @@ -0,0 +1,65 @@ +package com.pjilisense.flxai.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.pjilisense.flxai.base.service.impl.CrudServiceImpl; +import com.pjilisense.flxai.dao.FilesDao; +import com.pjilisense.flxai.dto.FilesDTO; +import com.pjilisense.flxai.entity.FilesEntity; +import com.pjilisense.flxai.service.FilesService; +import cn.hutool.core.util.StrUtil; +import com.pjilisense.flxai.utils.MapUtils; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@Service +public class FilesServiceImpl extends CrudServiceImpl implements FilesService { + + @Override + public QueryWrapper getWrapper(Map params){ + String id = (String)params.get("id"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(id), "id", id); + + return wrapper; + } +// public QueryWrapper getWrapperModifyName(FilesDTO dto){ +// String id = (String)dto.getId(); +// +// QueryWrapper wrapper = new QueryWrapper<>(); +// wrapper.eq(StrUtil.isNotBlank(id), "id", id); +// +// return wrapper; +// } + + @Override + public boolean modifyFileName(FilesDTO dto) { + int cnt = baseDao.modifyFileName(MapUtils.objectToMap(dto)); +// FilesEntity entity = baseDao.selectOne(getWrapperModifyName(dto)); +// entity.setName(dto.getName()); +// int cnt = baseDao.updateById(entity); + return cnt>0; + } + + @Override + public boolean modifyFileStatus(FilesDTO dto) { + Map map = MapUtils.objectToMap(dto); + int cnt = baseDao.modifyFileStatus(map); + return cnt>0; + } + + @Override + public boolean modifyFileCategory(FilesDTO dto) { + Map map = MapUtils.objectToMap(dto); + int cnt = baseDao.modifyFileCategory(map); + return cnt>0; + } +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/KnowledgeBasesServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/KnowledgeBasesServiceImpl.java new file mode 100644 index 0000000..47af9ca --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/KnowledgeBasesServiceImpl.java @@ -0,0 +1,41 @@ +package com.pjilisense.flxai.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.pjilisense.flxai.base.service.impl.CrudServiceImpl; +import com.pjilisense.flxai.dao.KnowledgeBasesDao; +import com.pjilisense.flxai.dto.FilesDTO; +import com.pjilisense.flxai.dto.KnowledgeBasesDTO; +import com.pjilisense.flxai.entity.KnowledgeBasesEntity; +import com.pjilisense.flxai.service.KnowledgeBasesService; +import cn.hutool.core.util.StrUtil; +import com.pjilisense.flxai.utils.MapUtils; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-01-14 + */ +@Service +public class KnowledgeBasesServiceImpl extends CrudServiceImpl implements KnowledgeBasesService { + + @Override + public QueryWrapper getWrapper(Map params){ + String id = (String)params.get("id"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(id), "id", id); + + return wrapper; + } + + + @Override + public boolean modifyDescriptuon(KnowledgeBasesDTO dto) { + int cnt = baseDao.modifyDescriptuon(MapUtils.objectToMap(dto)); + return cnt>0; + } +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeDeserializer.java b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeDeserializer.java new file mode 100644 index 0000000..fbfb466 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeDeserializer.java @@ -0,0 +1,33 @@ +package com.pjilisense.flxai.wrapper; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.time.*; +import java.time.format.DateTimeFormatter; + +public class OffsetDateTimeDeserializer extends JsonDeserializer { + @Override + public OffsetDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + String dateTimeStr = p.getText(); + if(dateTimeStr==null || dateTimeStr.trim().length()==0){ + return null; + } + if(dateTimeStr.length()==19&& dateTimeStr.indexOf('T')==-1) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + // 创建一个Joda DateTime实例 + LocalDateTime localDateTimeBJ = LocalDateTime.parse(dateTimeStr, formatter); + // 转换为OffsetDateTime + //OffsetDateTime offsetDateTimeUtc = localDateTime.atOffset(ZoneOffset.UTC); + OffsetDateTime offsetDateTimeUtc = localDateTimeBJ.atOffset(ZoneOffset.ofHours(+8)); + return offsetDateTimeUtc; + } else if(dateTimeStr.length()>19) { + OffsetDateTime dateTime = OffsetDateTime.parse(dateTimeStr, DateTimeFormatter.ISO_OFFSET_DATE_TIME); + return dateTime; + } + return null; + } +} + diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeSerializer.java b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeSerializer.java new file mode 100644 index 0000000..42d00e6 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeSerializer.java @@ -0,0 +1,26 @@ +package com.pjilisense.flxai.wrapper; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; + +public class OffsetDateTimeSerializer extends JsonSerializer { +// @Override +// public void serialize(OffsetDateTimeWrapper value, SerializerProvider serializers, com.fasterxml.jackson.core.JsonGenerator gen) throws IOException { +// gen.writeString(value.getDateTime().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); +// } + + @Override + public void serialize(OffsetDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + LocalDateTime localDateTimeBJ=value.plusHours(8).toLocalDateTime(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + gen.writeString(localDateTimeBJ.format(formatter)); + //gen.writeString(value.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); + } +} diff --git a/flx-ai/src/main/resources/application.yml b/flx-ai/src/main/resources/application.yml index 0f984de..26f77d5 100644 --- a/flx-ai/src/main/resources/application.yml +++ b/flx-ai/src/main/resources/application.yml @@ -43,6 +43,7 @@ management: mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml typeAliasesPackage: com.pjilisense.flxai.entity + configLocation: classpath:/mybatis-config.xml global-config: db-config: id-type: ASSIGN_ID @@ -50,12 +51,12 @@ mybatis-plus: #logic-delete-value: 1 #logic-not-delete-value: 0 banner: false - configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - map-underscore-to-camel-case: true - cache-enabled: false - call-setters-on-nulls: true - jdbc-type-for-null: 'null' + #configuration: + #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + #map-underscore-to-camel-case: true + #cache-enabled: false + #call-setters-on-nulls: true + #jdbc-type-for-null: 'null' configuration-properties: prefix: blobType: BLOB diff --git a/flx-ai/src/main/resources/mapper/postgres/FilesDao.xml b/flx-ai/src/main/resources/mapper/postgres/FilesDao.xml new file mode 100644 index 0000000..d9f6d77 --- /dev/null +++ b/flx-ai/src/main/resources/mapper/postgres/FilesDao.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE files SET name = #{name,jdbcType=VARCHAR},updated_at = now() WHERE id = #{id} + + + + UPDATE files SET file_status = #{fileStatus,jdbcType=VARCHAR},updated_at = now() WHERE id = #{id} + + + + UPDATE files SET file_category = #{fileCategory,jdbcType=VARCHAR},updated_at = now() WHERE id = #{id} + + \ No newline at end of file diff --git a/flx-ai/src/main/resources/mapper/postgres/KnowledgeBasesDao.xml b/flx-ai/src/main/resources/mapper/postgres/KnowledgeBasesDao.xml new file mode 100644 index 0000000..bde4571 --- /dev/null +++ b/flx-ai/src/main/resources/mapper/postgres/KnowledgeBasesDao.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + UPDATE knowledge_bases SET description = #{description,jdbcType=VARCHAR},updated_at = now() WHERE id = #{id} + + + \ No newline at end of file diff --git a/flx-ai/src/main/resources/mybatis-config.xml b/flx-ai/src/main/resources/mybatis-config.xml new file mode 100644 index 0000000..0a56887 --- /dev/null +++ b/flx-ai/src/main/resources/mybatis-config.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/FilesControllerTest.java b/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/FilesControllerTest.java new file mode 100644 index 0000000..8d7ba86 --- /dev/null +++ b/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/FilesControllerTest.java @@ -0,0 +1,114 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + *

+ * https://www.renren.io + *

+ * 版权所有,侵权必究! + */ + +package test.com.pjilisense.flxai.controller; + +import com.alibaba.fastjson.JSON; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import test.com.pjilisense.flxai.TestUtils; + +import java.util.HashMap; +import java.util.Map; + +public class FilesControllerTest { + @BeforeEach + public void setUpTestDataWithinTransaction() { + // set up test data within the transaction + } + @AfterEach + public void tearDownWithinTransaction() { + // execute "tear down" logic within the transaction + } + + @Test + public void testGetAllAiTools() { + String url = TestUtils.WebconnectURL+"/api/robot/files/file_2FbUmaefz5b4"; + String charset = TestUtils.UTF8; + try { + String body = TestUtils.doGet(url, charset); + System.out.println(body); + } catch (Exception e) { + e.printStackTrace(); + } + } +// @Test +// public void testsave() { +// String url = TestUtils.WebconnectURL+"/api/robot/files/"; +// String charset = TestUtils.UTF8; +// try { +// Map params = new HashMap(); +// params.put("userId","fd8ae359-64dc-4a57-ab41-5438e2fda975"); +// params.put("fileType","text/plain"); +// params.put("name","jykc3.sql"); +// params.put("size",1864714); +// params.put("url","files/482454/d2b0edb3-15bf-4fe6-ba2e-97b5f1fe0288.sql"); +// params.put("fileHash","1d66edbc0b5da3289ecea1ae00ac384b2378603193574c5f0bc9a9a988de2a16"); +// params.put("chunkTaskId","ab3f259e-775a-4c57-8338-b273684f70d1"); +// params.put("embeddingTaskId","12020d55-d453-46d7-a8c8-b0bba5f5c747"); +// params.put("fileCategory","1"); +// params.put("fileStatus","1"); +// +// Map metadata = new HashMap(); +// params.put("metadata",metadata); +// metadata.put("date","482454"); +// metadata.put("path","files/482454/d2b0edb3-15bf-4fe6-ba2e-97b5f1fe0288.sql"); +// metadata.put("filename","d2b0edb3-15bf-4fe6-ba2e-97b5f1fe0288.sql"); +// metadata.put("dirname","files/482454"); +// +// String body = TestUtils.doPost(url, JSON.toJSONString(params), charset); +// System.out.println(body); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + @Test + public void testmodifyFileName() { + String url = TestUtils.WebconnectURL+"/api/robot/files/modifyFileName"; + String charset = TestUtils.UTF8; + try { + Map params = new HashMap(); + params.put("id","file_2FbUmaefz5b4"); + params.put("name","jykc2.sql"); + String body = TestUtils.doPost(url, JSON.toJSONString(params), charset); + System.out.println(body); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void testmodifyFileStatus() { + String url = TestUtils.WebconnectURL+"/api/robot/files/modifyFileStatus"; + String charset = TestUtils.UTF8; + try { + Map params = new HashMap(); + params.put("id","file_2FbUmaefz5b4"); + params.put("fileStatus","1"); + String body = TestUtils.doPost(url, JSON.toJSONString(params), charset); + System.out.println(body); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Test + public void testmodifyFileCategory() { + String url = TestUtils.WebconnectURL+"/api/robot/files/modifyFileCategory"; + String charset = TestUtils.UTF8; + try { + Map params = new HashMap(); + params.put("id","file_2FbUmaefz5b4"); + params.put("fileCategory","1"); + String body = TestUtils.doPost(url, JSON.toJSONString(params), charset); + System.out.println(body); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/KnowledgeBasesControllerTest.java b/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/KnowledgeBasesControllerTest.java new file mode 100644 index 0000000..d552f20 --- /dev/null +++ b/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/KnowledgeBasesControllerTest.java @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + *

+ * https://www.renren.io + *

+ * 版权所有,侵权必究! + */ + +package test.com.pjilisense.flxai.controller; + +import com.alibaba.fastjson.JSON; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import test.com.pjilisense.flxai.TestUtils; + +import java.util.HashMap; +import java.util.Map; + +public class KnowledgeBasesControllerTest { + @BeforeEach + public void setUpTestDataWithinTransaction() { + // set up test data within the transaction + } + @AfterEach + public void tearDownWithinTransaction() { + // execute "tear down" logic within the transaction + } + + @Test + public void testGet() { + String url = TestUtils.WebconnectURL+"/api/robot/knowledgebases/kb_E5EcemGyKnh9"; + String charset = TestUtils.UTF8; + try { + String body = TestUtils.doGet(url, charset); + System.out.println(body); + } catch (Exception e) { + e.printStackTrace(); + } + } +// @Test +// public void testsave() { +// String url = TestUtils.WebconnectURL+"/api/robot/knowledgebases/"; +// String charset = TestUtils.UTF8; +// try { +// Map params = new HashMap(); +//// params.put("id","kb_E5EcemGyKnh9"); +// params.put("name","知识库4"); +// params.put("description","知识库4测试"); +// params.put("userId","fd8ae359-64dc-4a57-ab41-5438e2fda975"); +// params.put("isPublic",true); +//// params.put("createdAt","2025-01-14 14:27:55"); +//// params.put("updatedAt","2025-01-14 14:27:55"); +//// params.put("accessedAt","2025-01-14 14:27:55"); +//// "id":"kb_E5EcemGyKnh9", +//// "name":"知识库1", +//// "description":"知识库测试2", +//// "avatar":null, +//// "type":null, +//// "userId":"fd8ae359-64dc-4a57-ab41-5438e2fda975", +//// "isPublic":false, +//// "settings":null, +//// "createdAt":"2025-01-14 14:27:55", +//// "updatedAt":"2025-01-14 14:27:55", +//// "accessedAt":"2025-01-14 14:27:55" +// +// String body = TestUtils.doPost(url, JSON.toJSONString(params), charset); +// System.out.println(body); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } + @Test + public void testmodifyDescriptuon() { + String url = TestUtils.WebconnectURL+"/api/robot/knowledgebases/modifyDescriptuon"; + String charset = TestUtils.UTF8; + try { + Map params = new HashMap(); + params.put("id","kb_E5EcemGyKnh9"); + params.put("description","知识库测试23"); + String body = TestUtils.doPost(url, JSON.toJSONString(params), charset); + System.out.println(body); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file