From c1d11bdc516b269f6100b1cc8a26e58ffec2389a Mon Sep 17 00:00:00 2001 From: liushujing Date: Wed, 15 Jan 2025 18:06:47 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=90=8D=E5=AD=97=E5=88=86=E7=B1=BB=E4=BF=AE=E6=94=B9=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flx-ai/pom.xml | 17 ++- .../flxai/controller/FilesController.java | 105 ++++++++++++++++++ .../com/pjilisense/flxai/dao/FilesDao.java | 23 ++++ .../com/pjilisense/flxai/dto/FilesDTO.java | 79 +++++++++++++ .../pjilisense/flxai/entity/FilesEntity.java | 87 +++++++++++++++ .../flxai/handle/JsonbTypeHandler.java | 46 ++++++++ .../flxai/handle/UUIDArrTypeHandler.java | 97 ++++++++++++++++ .../flxai/handle/UUIDTypeHandler.java | 97 ++++++++++++++++ .../flxai/service/FilesService.java | 19 ++++ .../flxai/service/impl/FilesServiceImpl.java | 65 +++++++++++ .../wrapper/OffsetDateTimeDeserializer.java | 32 ++++++ .../wrapper/OffsetDateTimeSerializer.java | 21 ++++ flx-ai/src/main/resources/application.yml | 13 ++- .../resources/mapper/postgres/FilesDao.xml | 35 ++++++ flx-ai/src/main/resources/mybatis-config.xml | 30 +++++ .../flxai/controller/FilesControllerTest.java | 84 ++++++++++++++ 16 files changed, 843 insertions(+), 7 deletions(-) create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/controller/FilesController.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dao/FilesDao.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dto/FilesDTO.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/entity/FilesEntity.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/handle/JsonbTypeHandler.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/handle/UUIDArrTypeHandler.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/handle/UUIDTypeHandler.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/FilesService.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/impl/FilesServiceImpl.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeDeserializer.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeSerializer.java create mode 100644 flx-ai/src/main/resources/mapper/postgres/FilesDao.xml create mode 100644 flx-ai/src/main/resources/mybatis-config.xml create mode 100644 flx-ai/src/test/java/test/com/pjilisense/flxai/controller/FilesControllerTest.java 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..6ba4207 --- /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(); + } + + @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(); + } + + @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/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/dto/FilesDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/FilesDTO.java new file mode 100644 index 0000000..9ac705b --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/FilesDTO.java @@ -0,0 +1,79 @@ +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 = "${comments}") +public class FilesDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "$column.comments") + private String id; + + @ApiModelProperty(value = "$column.comments") + private String userId; + + @ApiModelProperty(value = "$column.comments") + private String fileType; + + @ApiModelProperty(value = "$column.comments") + private String name; + + @ApiModelProperty(value = "$column.comments") + private Integer size; + + @ApiModelProperty(value = "$column.comments") + private String url; + + @ApiModelProperty(value = "$column.comments") + private Map metadata; + + @ApiModelProperty(value = "$column.comments") + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime createdAt; + + @ApiModelProperty(value = "$column.comments") + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime updatedAt; + + @ApiModelProperty(value = "$column.comments") + private String fileHash; + + @ApiModelProperty(value = "$column.comments") + private UUID chunkTaskId; + + @ApiModelProperty(value = "$column.comments") + private UUID embeddingTaskId; + + @ApiModelProperty(value = "$column.comments") + @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/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/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/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/wrapper/OffsetDateTimeDeserializer.java b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeDeserializer.java new file mode 100644 index 0000000..7b9b567 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeDeserializer.java @@ -0,0 +1,32 @@ +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 localDateTime = LocalDateTime.parse(dateTimeStr, formatter); + // 转换为OffsetDateTime + OffsetDateTime offsetDateTimeUtc = localDateTime.atOffset(ZoneOffset.UTC); + 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..64a11a8 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeSerializer.java @@ -0,0 +1,21 @@ +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.OffsetDateTime; +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 { + 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..607a628 --- /dev/null +++ b/flx-ai/src/main/resources/mapper/postgres/FilesDao.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE files SET name = #{name,jdbcType=VARCHAR} WHERE id = #{id} + + + + UPDATE files SET file_status = #{fileStatus,jdbcType=VARCHAR} WHERE id = #{id} + + + + UPDATE files SET file_category = #{fileCategory,jdbcType=VARCHAR} 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..78f981b --- /dev/null +++ b/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/FilesControllerTest.java @@ -0,0 +1,84 @@ +/** + * 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 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 From d9507d32f398bf3b1cd6759f5a6114ac1b135373 Mon Sep 17 00:00:00 2001 From: liushujing Date: Thu, 16 Jan 2025 16:14:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flxai/controller/FilesController.java | 4 +- .../controller/KnowledgeBasesController.java | 92 +++++++++++++++++++ .../flxai/dao/KnowledgeBasesDao.java | 19 ++++ .../com/pjilisense/flxai/dto/FilesDTO.java | 15 +-- .../flxai/dto/KnowledgeBasesDTO.java | 55 +++++++++++ .../flxai/entity/KnowledgeBasesEntity.java | 67 ++++++++++++++ .../flxai/service/KnowledgeBasesService.java | 16 ++++ .../impl/KnowledgeBasesServiceImpl.java | 41 +++++++++ .../wrapper/OffsetDateTimeDeserializer.java | 5 +- .../wrapper/OffsetDateTimeSerializer.java | 7 +- .../resources/mapper/postgres/FilesDao.xml | 6 +- .../mapper/postgres/KnowledgeBasesDao.xml | 24 +++++ .../flxai/controller/FilesControllerTest.java | 30 ++++++ .../KnowledgeBasesControllerTest.java | 87 ++++++++++++++++++ 14 files changed, 446 insertions(+), 22 deletions(-) create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/controller/KnowledgeBasesController.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dao/KnowledgeBasesDao.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dto/KnowledgeBasesDTO.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/entity/KnowledgeBasesEntity.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/KnowledgeBasesService.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/impl/KnowledgeBasesServiceImpl.java create mode 100644 flx-ai/src/main/resources/mapper/postgres/KnowledgeBasesDao.xml create mode 100644 flx-ai/src/test/java/test/com/pjilisense/flxai/controller/KnowledgeBasesControllerTest.java 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 index 6ba4207..19c259c 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/controller/FilesController.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/FilesController.java @@ -65,7 +65,7 @@ public class FilesController { //@RequestBody JSONObject object //FilesDTO dto = object.toJavaObject(FilesDTO.class); filesService.save(dto); - return new Result(); + return new Result().ok(dto); } @PostMapping("/modifyFileName") @@ -91,7 +91,7 @@ public class FilesController { public Result update(@RequestBody FilesDTO dto){ filesService.update(dto); - return new Result(); + return new Result().ok(dto); } @DeleteMapping 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/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 index 9ac705b..ddf3a76 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/dto/FilesDTO.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/FilesDTO.java @@ -20,51 +20,38 @@ import java.util.UUID; * @since 1.0.0 2025-01-14 */ @Data -@ApiModel(value = "${comments}") +@ApiModel(value = "文件") public class FilesDTO implements Serializable { private static final long serialVersionUID = 1L; - @ApiModelProperty(value = "$column.comments") private String id; - @ApiModelProperty(value = "$column.comments") private String userId; - @ApiModelProperty(value = "$column.comments") private String fileType; - @ApiModelProperty(value = "$column.comments") private String name; - @ApiModelProperty(value = "$column.comments") private Integer size; - @ApiModelProperty(value = "$column.comments") private String url; - @ApiModelProperty(value = "$column.comments") private Map metadata; - @ApiModelProperty(value = "$column.comments") @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) private OffsetDateTime createdAt; - @ApiModelProperty(value = "$column.comments") @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) private OffsetDateTime updatedAt; - @ApiModelProperty(value = "$column.comments") private String fileHash; - @ApiModelProperty(value = "$column.comments") private UUID chunkTaskId; - @ApiModelProperty(value = "$column.comments") private UUID embeddingTaskId; - @ApiModelProperty(value = "$column.comments") @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) private OffsetDateTime accessedAt; 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/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/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/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 index 7b9b567..fbfb466 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeDeserializer.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeDeserializer.java @@ -18,9 +18,10 @@ public class OffsetDateTimeDeserializer extends JsonDeserializer if(dateTimeStr.length()==19&& dateTimeStr.indexOf('T')==-1) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 创建一个Joda DateTime实例 - LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter); + LocalDateTime localDateTimeBJ = LocalDateTime.parse(dateTimeStr, formatter); // 转换为OffsetDateTime - OffsetDateTime offsetDateTimeUtc = localDateTime.atOffset(ZoneOffset.UTC); + //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); 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 index 64a11a8..42d00e6 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeSerializer.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/wrapper/OffsetDateTimeSerializer.java @@ -5,7 +5,9 @@ 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 { @@ -16,6 +18,9 @@ public class OffsetDateTimeSerializer extends JsonSerializer { @Override public void serialize(OffsetDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); + 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/mapper/postgres/FilesDao.xml b/flx-ai/src/main/resources/mapper/postgres/FilesDao.xml index 607a628..d9f6d77 100644 --- a/flx-ai/src/main/resources/mapper/postgres/FilesDao.xml +++ b/flx-ai/src/main/resources/mapper/postgres/FilesDao.xml @@ -22,14 +22,14 @@ - UPDATE files SET name = #{name,jdbcType=VARCHAR} WHERE id = #{id} + UPDATE files SET name = #{name,jdbcType=VARCHAR},updated_at = now() WHERE id = #{id} - UPDATE files SET file_status = #{fileStatus,jdbcType=VARCHAR} 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} 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/test/java/test/com/pjilisense/flxai/controller/FilesControllerTest.java b/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/FilesControllerTest.java index 78f981b..8d7ba86 100644 --- 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 @@ -38,6 +38,36 @@ public class FilesControllerTest { 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"; 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