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