From 883925c2873a53d254faafac30f2969d6f03b572 Mon Sep 17 00:00:00 2001 From: liushujing Date: Mon, 24 Feb 2025 16:00:51 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E6=A3=80?= =?UTF-8?q?=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flx-ai/pom.xml | 6 + .../flxai/controller/ChunksController.java | 93 +++++++ .../controller/FileChunksController.java | 88 +++++++ .../controller/GlobalFilesController.java | 88 +++++++ .../com/pjilisense/flxai/dao/ChunksDao.java | 20 ++ .../pjilisense/flxai/dao/FileChunksDao.java | 16 ++ .../pjilisense/flxai/dao/GlobalFilesDao.java | 16 ++ .../com/pjilisense/flxai/dto/ChunksDTO.java | 64 +++++ .../pjilisense/flxai/dto/FileChunksDTO.java | 38 +++ .../pjilisense/flxai/dto/GlobalFilesDTO.java | 52 ++++ .../pjilisense/flxai/entity/ChunksEntity.java | 67 +++++ .../flxai/entity/FileChunksEntity.java | 35 +++ .../flxai/entity/GlobalFilesEntity.java | 51 ++++ .../flxai/service/ChunksService.java | 19 ++ .../flxai/service/FileChunksService.java | 15 ++ .../flxai/service/GlobalFilesService.java | 15 ++ .../flxai/service/impl/ChunksServiceImpl.java | 244 ++++++++++++++++++ .../service/impl/FileChunksServiceImpl.java | 34 +++ .../service/impl/GlobalFilesServiceImpl.java | 34 +++ .../resources/mapper/postgres/ChunksDao.xml | 38 +++ .../mapper/postgres/FileChunksDao.xml | 13 + .../mapper/postgres/GlobalFilesDao.xml | 17 ++ .../controller/ChunksControllerTest.java | 45 ++++ 23 files changed, 1108 insertions(+) create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/controller/ChunksController.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/controller/FileChunksController.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/controller/GlobalFilesController.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dao/ChunksDao.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dao/FileChunksDao.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dao/GlobalFilesDao.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dto/ChunksDTO.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dto/FileChunksDTO.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dto/GlobalFilesDTO.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/entity/ChunksEntity.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/entity/FileChunksEntity.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/entity/GlobalFilesEntity.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/ChunksService.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/FileChunksService.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/GlobalFilesService.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/impl/ChunksServiceImpl.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/impl/FileChunksServiceImpl.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/impl/GlobalFilesServiceImpl.java create mode 100644 flx-ai/src/main/resources/mapper/postgres/ChunksDao.xml create mode 100644 flx-ai/src/main/resources/mapper/postgres/FileChunksDao.xml create mode 100644 flx-ai/src/main/resources/mapper/postgres/GlobalFilesDao.xml create mode 100644 flx-ai/src/test/java/test/com/pjilisense/flxai/controller/ChunksControllerTest.java diff --git a/flx-ai/pom.xml b/flx-ai/pom.xml index 6643cdd..49ba9e5 100644 --- a/flx-ai/pom.xml +++ b/flx-ai/pom.xml @@ -148,6 +148,12 @@ knife4j-spring-boot-starter ${knife4j.version} + + + com.hankcs + hanlp + portable-1.8.6 + diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/ChunksController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/ChunksController.java new file mode 100644 index 0000000..23531a0 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/ChunksController.java @@ -0,0 +1,93 @@ +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.ChunksDTO; +import com.pjilisense.flxai.service.ChunksService; +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-02-10 + */ +@RestController +@RequestMapping(Constant.BASE_PATH+"chunks") +@Api(tags="${comments}") +public class ChunksController { + + private static Logger logger = LoggerFactory.getLogger(ChunksController.class); + + @Autowired + private ChunksService chunksService; + + @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 = chunksService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @ApiOperation("信息") + public Result get(@PathVariable("id") Long id){ + ChunksDTO data = chunksService.get(id); + + return new Result().ok(data); + } + @PostMapping("/search") + @ApiOperation("模糊检索") + public Result searchByText(@RequestBody ChunksDTO dto){ + List> list =chunksService.search(dto.getUserId(),dto.getText()); + return new Result().ok(list); + } + @PostMapping + @ApiOperation("保存") + public Result save(@RequestBody ChunksDTO dto){ + chunksService.save(dto); + + return new Result(); + } + + @PutMapping + @ApiOperation("修改") + public Result update(@RequestBody ChunksDTO dto){ + + chunksService.update(dto); + + return new Result(); + } + + @DeleteMapping + @ApiOperation("删除") + public Result delete(@RequestBody Long[] ids){ + //效验数据 + chunksService.delete(ids); + + return new Result(); + } + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/FileChunksController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/FileChunksController.java new file mode 100644 index 0000000..ca43b0e --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/FileChunksController.java @@ -0,0 +1,88 @@ +package com.pjilisense.flxai.controller; + +import com.pjilisense.flxai.base.constant.Constant; +import com.pjilisense.flxai.page.PageData; +import com.pjilisense.flxai.utils.Result; +import com.pjilisense.flxai.dto.FileChunksDTO; +import com.pjilisense.flxai.service.FileChunksService; +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-02-10 + */ +@RestController +@RequestMapping(Constant.BASE_PATH+"filechunks") +@Api(tags="${comments}") +public class FileChunksController { + + private static Logger logger = LoggerFactory.getLogger(FileChunksController.class); + + @Autowired + private FileChunksService fileChunksService; + + @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 = fileChunksService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @ApiOperation("信息") + public Result get(@PathVariable("id") Long id){ + FileChunksDTO data = fileChunksService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @ApiOperation("保存") + public Result save(@RequestBody FileChunksDTO dto){ + + fileChunksService.save(dto); + + return new Result(); + } + + @PutMapping + @ApiOperation("修改") + public Result update(@RequestBody FileChunksDTO dto){ + + fileChunksService.update(dto); + + return new Result(); + } + + @DeleteMapping + @ApiOperation("删除") + public Result delete(@RequestBody Long[] ids){ + + fileChunksService.delete(ids); + + return new Result(); + } + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/GlobalFilesController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/GlobalFilesController.java new file mode 100644 index 0000000..cea635d --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/GlobalFilesController.java @@ -0,0 +1,88 @@ +package com.pjilisense.flxai.controller; + +import com.pjilisense.flxai.base.constant.Constant; +import com.pjilisense.flxai.page.PageData; +import com.pjilisense.flxai.utils.Result; +import com.pjilisense.flxai.dto.GlobalFilesDTO; +import com.pjilisense.flxai.service.GlobalFilesService; +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-02-10 + */ +@RestController +@RequestMapping(Constant.BASE_PATH+"globalfiles") +@Api(tags="${comments}") +public class GlobalFilesController { + + private static Logger logger = LoggerFactory.getLogger(GlobalFilesController.class); + + @Autowired + private GlobalFilesService globalFilesService; + + @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 = globalFilesService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @ApiOperation("信息") + public Result get(@PathVariable("id") Long id){ + GlobalFilesDTO data = globalFilesService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @ApiOperation("保存") + public Result save(@RequestBody GlobalFilesDTO dto){ + + globalFilesService.save(dto); + + return new Result(); + } + + @PutMapping + @ApiOperation("修改") + public Result update(@RequestBody GlobalFilesDTO dto){ + + globalFilesService.update(dto); + + return new Result(); + } + + @DeleteMapping + @ApiOperation("删除") + public Result delete(@RequestBody Long[] ids){ + + globalFilesService.delete(ids); + + return new Result(); + } + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dao/ChunksDao.java b/flx-ai/src/main/java/com/pjilisense/flxai/dao/ChunksDao.java new file mode 100644 index 0000000..f4debc9 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dao/ChunksDao.java @@ -0,0 +1,20 @@ +package com.pjilisense.flxai.dao; + +import com.pjilisense.flxai.base.dao.BaseDao; +import com.pjilisense.flxai.entity.ChunksEntity; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +@Mapper +public interface ChunksDao extends BaseDao { + List> queryCsv(Map map); + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dao/FileChunksDao.java b/flx-ai/src/main/java/com/pjilisense/flxai/dao/FileChunksDao.java new file mode 100644 index 0000000..0e620ff --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dao/FileChunksDao.java @@ -0,0 +1,16 @@ +package com.pjilisense.flxai.dao; + +import com.pjilisense.flxai.base.dao.BaseDao; +import com.pjilisense.flxai.entity.FileChunksEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +@Mapper +public interface FileChunksDao extends BaseDao { + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dao/GlobalFilesDao.java b/flx-ai/src/main/java/com/pjilisense/flxai/dao/GlobalFilesDao.java new file mode 100644 index 0000000..85e132e --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dao/GlobalFilesDao.java @@ -0,0 +1,16 @@ +package com.pjilisense.flxai.dao; + +import com.pjilisense.flxai.base.dao.BaseDao; +import com.pjilisense.flxai.entity.GlobalFilesEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +@Mapper +public interface GlobalFilesDao extends BaseDao { + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dto/ChunksDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/ChunksDTO.java new file mode 100644 index 0000000..0e17396 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/ChunksDTO.java @@ -0,0 +1,64 @@ +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-02-10 + */ +@Data +@ApiModel(value = "${comments}") +public class ChunksDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "$column.comments") + private UUID id; + + @ApiModelProperty(value = "$column.comments") + private String text; + + @ApiModelProperty(value = "$column.comments") + private String abstractx; + + @ApiModelProperty(value = "$column.comments") + private Map metadata; + + @ApiModelProperty(value = "$column.comments") + private Integer index; + + @ApiModelProperty(value = "$column.comments") + private String type; + + @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 userId; + + @ApiModelProperty(value = "$column.comments") + @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/dto/FileChunksDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/FileChunksDTO.java new file mode 100644 index 0000000..722902d --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/FileChunksDTO.java @@ -0,0 +1,38 @@ +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.UUID; + + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +@Data +@ApiModel(value = "${comments}") +public class FileChunksDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "$column.comments") + private String fileId; + + @ApiModelProperty(value = "$column.comments") + private UUID chunkId; + + @ApiModelProperty(value = "$column.comments") + @JsonSerialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeSerializer.class) + @JsonDeserialize(using = com.pjilisense.flxai.wrapper.OffsetDateTimeDeserializer.class) + private OffsetDateTime createdAt; + + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dto/GlobalFilesDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/GlobalFilesDTO.java new file mode 100644 index 0000000..024ad5e --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/GlobalFilesDTO.java @@ -0,0 +1,52 @@ +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-02-10 + */ +@Data +@ApiModel(value = "${comments}") +public class GlobalFilesDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "$column.comments") + private String hashId; + + @ApiModelProperty(value = "$column.comments") + private String fileType; + + @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 accessedAt; + + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/entity/ChunksEntity.java b/flx-ai/src/main/java/com/pjilisense/flxai/entity/ChunksEntity.java new file mode 100644 index 0000000..7cb9ff0 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/entity/ChunksEntity.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 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-02-10 + */ +@Data +@TableName("chunks") +public class ChunksEntity { + + /** + * $column.comments + */ + @TableField(typeHandler = UUIDTypeHandler.class) + private UUID id; + /** + * $column.comments + */ + private String text; + /** + * $column.comments + */ + @TableField(value="abstract") + private String abstractx; + /** + * $column.comments + */ + @TableField(value = "metadata", typeHandler = JsonbTypeHandler.class) + private Map metadata; + /** + * $column.comments + */ + private Integer index; + /** + * $column.comments + */ + private String type; + /** + * $column.comments + */ + private OffsetDateTime createdAt; + /** + * $column.comments + */ + private OffsetDateTime updatedAt; + /** + * $column.comments + */ + private String userId; + /** + * $column.comments + */ + private OffsetDateTime accessedAt; +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/entity/FileChunksEntity.java b/flx-ai/src/main/java/com/pjilisense/flxai/entity/FileChunksEntity.java new file mode 100644 index 0000000..c095c87 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/entity/FileChunksEntity.java @@ -0,0 +1,35 @@ +package com.pjilisense.flxai.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.pjilisense.flxai.handle.UUIDTypeHandler; +import lombok.Data; + +import java.time.OffsetDateTime; +import java.util.Date; +import java.util.UUID; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +@Data +@TableName("file_chunks") +public class FileChunksEntity { + + /** + * $column.comments + */ + private String fileId; + /** + * $column.comments + */ + @TableField(typeHandler = UUIDTypeHandler.class) + private UUID chunkId; + /** + * $column.comments + */ + private OffsetDateTime createdAt; +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/entity/GlobalFilesEntity.java b/flx-ai/src/main/java/com/pjilisense/flxai/entity/GlobalFilesEntity.java new file mode 100644 index 0000000..246931e --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/entity/GlobalFilesEntity.java @@ -0,0 +1,51 @@ +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-02-10 + */ +@Data +@TableName("global_files") +public class GlobalFilesEntity { + + /** + * $column.comments + */ + private String hashId; + /** + * $column.comments + */ + private String fileType; + /** + * $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 accessedAt; +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/ChunksService.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/ChunksService.java new file mode 100644 index 0000000..e749899 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/ChunksService.java @@ -0,0 +1,19 @@ +package com.pjilisense.flxai.service; + +import com.pjilisense.flxai.base.service.CrudService; +import com.pjilisense.flxai.dto.ChunksDTO; +import com.pjilisense.flxai.entity.ChunksEntity; + +import java.util.List; +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +public interface ChunksService extends CrudService { + + List> search(String userid,String text); +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/FileChunksService.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/FileChunksService.java new file mode 100644 index 0000000..8abd7df --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/FileChunksService.java @@ -0,0 +1,15 @@ +package com.pjilisense.flxai.service; + +import com.pjilisense.flxai.base.service.CrudService; +import com.pjilisense.flxai.dto.FileChunksDTO; +import com.pjilisense.flxai.entity.FileChunksEntity; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +public interface FileChunksService extends CrudService { + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/GlobalFilesService.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/GlobalFilesService.java new file mode 100644 index 0000000..d94777a --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/GlobalFilesService.java @@ -0,0 +1,15 @@ +package com.pjilisense.flxai.service; + +import com.pjilisense.flxai.base.service.CrudService; +import com.pjilisense.flxai.dto.GlobalFilesDTO; +import com.pjilisense.flxai.entity.GlobalFilesEntity; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +public interface GlobalFilesService extends CrudService { + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/ChunksServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/ChunksServiceImpl.java new file mode 100644 index 0000000..7cf44ac --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/ChunksServiceImpl.java @@ -0,0 +1,244 @@ +package com.pjilisense.flxai.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.hankcs.hanlp.HanLP; +import com.hankcs.hanlp.seg.Segment; +import com.hankcs.hanlp.seg.common.Term; +import com.pjilisense.flxai.base.service.impl.CrudServiceImpl; +import com.pjilisense.flxai.dao.ChunksDao; +import com.pjilisense.flxai.dto.ChunksDTO; +import com.pjilisense.flxai.entity.ChunksEntity; +import com.pjilisense.flxai.service.ChunksService; +import cn.hutool.core.util.StrUtil; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +@Service +public class ChunksServiceImpl extends CrudServiceImpl implements ChunksService { + + @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 List> search(String userid,String keyText) { + Segment seg= HanLP.newSegment(); + seg.enableCustomDictionary(false); +// String keyText="我爱北京天安门"; +// keyText="HanLP是由一系列NLP工具组成的开源项目,其中包含了中文分词、词性标注、命名实体识别等功能。"; + List lst = seg.seg(keyText); + ArrayList listWord=processTermList(lst); + //ArrayList listSentence=processTermListx(lst); + LinkedHashSet set = new LinkedHashSet<>(); + set.addAll(listWord); + //set.addAll(listSentence); + listWord.clear(); + //listSentence.clear(); + ArrayList wordList=processTermList(lst); + wordList.addAll(set); + set.clear(); + HashMap map = new HashMap<>(); + map.put("userid",userid); + map.put("wordList",wordList); + List> list = baseDao.queryCsv(map); + List> listRet = new ArrayList<>() ; + if(list!=null && list.size()>0) { + ArrayList listText=processTermListN0Com(lst); + List idList = new ArrayList<>(); + for (Map mp: list){ + String ttext = String.valueOf(mp.get("text")); + int pos = ttext.indexOf(','); + String question = ttext.substring(0,pos); + String answer = ttext.substring(pos+1); + mp.put("question",question); + mp.put("answer",answer); + List lst2 = seg.seg(question); + ArrayList listQuestion=processTermListN0Com(lst2); + double similarity =calculateSimilarity(listText, listQuestion); + BigDecimal bd = new BigDecimal(similarity); + if(bd.compareTo(BigDecimal.ZERO.stripTrailingZeros())==0){ + idList.add(String.valueOf(mp.get("id"))); + } else { + System.out.println(bd.toString()); + mp.put("similarity",bd.toString()); + } + } + for(Map mp: list){ + String id=String.valueOf(mp.get("id")); + if(!idList.contains(id)){ + listRet.add(mp); + } + } + list.clear(); + list.addAll(listRet); + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map o1, Map o2) { + BigDecimal bd1 = new BigDecimal(String.valueOf(o1.get("similarity"))); + BigDecimal bd2 = new BigDecimal(String.valueOf(o2.get("similarity"))); + return bd1.compareTo(bd2)*(-1); + } + }); + } + return list; + } + + + private static ArrayList processTermList(List lst) { + ArrayList ret = new ArrayList<>(); + StringBuilder sd = new StringBuilder(); + for(int i=0;i0) { + ret.add(sd.toString()); + sd = sd.delete(0,sd.length()); + } + continue; + }else { + String word = term.word; + if(word.length()==1) { + sd.append(word); + if(i+1< lst.size()) { + Term termx = lst.get(i+1); + if(!termx.nature.startsWith('w')) { + String wordx = termx.word; + sd.append(wordx); + if(wordx.length()>1) { + ret.add(sd.toString()); + sd = sd.delete(0,sd.length()); + } + i++; + } + } + } else { + sd.append(word); + ret.add(sd.toString()); + sd = sd.delete(0,sd.length()); + } + } + + } +// System.out.println("ret="); +// for(String term : ret) { +// System.out.println(term); +// } + return ret; + } + + private static ArrayList processTermListN0Com(List lst) { + ArrayList ret = new ArrayList<>(); + StringBuilder sd = new StringBuilder(); + for(int i=0;i0) { + ret.add(sd.toString()); + sd = sd.delete(0,sd.length()); + } + continue; + }else { + String word = term.word; + if(word.length()==1) { + sd.append(word); + if(i+1< lst.size()) { + Term termx = lst.get(i+1); + if(!termx.nature.startsWith('w')) { + String wordx = termx.word; + sd.append(wordx); + if(wordx.length()>0) { + ret.add(sd.toString()); + sd = sd.delete(0,sd.length()); + } + i++; + } + } + } else { + sd.append(word); + ret.add(sd.toString()); + sd = sd.delete(0,sd.length()); + } + } + + } +// System.out.println("ret="); +// for(String term : ret) { +// System.out.println(term); +// } + return ret; + } + private static ArrayList processTermListx(List lst) { + ArrayList ret = new ArrayList<>(); + StringBuilder sd = new StringBuilder(); + for(int i=0;i0) { + ret.add(sd.toString()); + sd = sd.delete(0,sd.length()); + } + continue; + }else { + String word = term.word; + sd.append(word); + } + } +// System.out.println("ret="); +// for(String term : ret) { +// System.out.println(term); +// } + return ret; + } + + // 创建单词频率映射 + private Map createFrequencyMap(List words) { + Map freqMap = new HashMap<>(); + for (String word : words) { + freqMap.put(word, freqMap.getOrDefault(word, 0) + 1); + } + return freqMap; + } + + // 计算余弦相似度 + private double calculateSimilarity(List words1, List words2) { +// List words1 = preprocessText(text1); +// List words2 = preprocessText(text2); + + Map freqMap1 = createFrequencyMap(words1); + Map freqMap2 = createFrequencyMap(words2); + + double dotProduct = 0.0; + double magnitude1 = 0.0; + double magnitude2 = 0.0; + + for (String word : freqMap1.keySet()) { + int freq1 = freqMap1.get(word); + magnitude1 += freq1 * freq1; + if (freqMap2.containsKey(word)) { + int freq2 = freqMap2.get(word); + dotProduct += freq1 * freq2; + } + } + + for (int freq : freqMap2.values()) { + magnitude2 += freq * freq; + } + + return dotProduct / (Math.sqrt(magnitude1) * Math.sqrt(magnitude2)); + } +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/FileChunksServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/FileChunksServiceImpl.java new file mode 100644 index 0000000..01e1fa4 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/FileChunksServiceImpl.java @@ -0,0 +1,34 @@ +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.FileChunksDao; +import com.pjilisense.flxai.dto.FileChunksDTO; +import com.pjilisense.flxai.entity.FileChunksEntity; +import com.pjilisense.flxai.service.FileChunksService; +import cn.hutool.core.util.StrUtil; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +@Service +public class FileChunksServiceImpl extends CrudServiceImpl implements FileChunksService { + + @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; + } + + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/GlobalFilesServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/GlobalFilesServiceImpl.java new file mode 100644 index 0000000..1b212b7 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/GlobalFilesServiceImpl.java @@ -0,0 +1,34 @@ +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.GlobalFilesDao; +import com.pjilisense.flxai.dto.GlobalFilesDTO; +import com.pjilisense.flxai.entity.GlobalFilesEntity; +import com.pjilisense.flxai.service.GlobalFilesService; +import cn.hutool.core.util.StrUtil; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-10 + */ +@Service +public class GlobalFilesServiceImpl extends CrudServiceImpl implements GlobalFilesService { + + @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; + } + + +} \ No newline at end of file diff --git a/flx-ai/src/main/resources/mapper/postgres/ChunksDao.xml b/flx-ai/src/main/resources/mapper/postgres/ChunksDao.xml new file mode 100644 index 0000000..d7a1147 --- /dev/null +++ b/flx-ai/src/main/resources/mapper/postgres/ChunksDao.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/flx-ai/src/main/resources/mapper/postgres/FileChunksDao.xml b/flx-ai/src/main/resources/mapper/postgres/FileChunksDao.xml new file mode 100644 index 0000000..9bb9c12 --- /dev/null +++ b/flx-ai/src/main/resources/mapper/postgres/FileChunksDao.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/flx-ai/src/main/resources/mapper/postgres/GlobalFilesDao.xml b/flx-ai/src/main/resources/mapper/postgres/GlobalFilesDao.xml new file mode 100644 index 0000000..4078694 --- /dev/null +++ b/flx-ai/src/main/resources/mapper/postgres/GlobalFilesDao.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/ChunksControllerTest.java b/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/ChunksControllerTest.java new file mode 100644 index 0000000..ca27605 --- /dev/null +++ b/flx-ai/src/test/java/test/com/pjilisense/flxai/controller/ChunksControllerTest.java @@ -0,0 +1,45 @@ +/** + * 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 ChunksControllerTest { + @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/chunks/search"; + String charset = TestUtils.UTF8; + try { + Map params = new HashMap(); + params.put("text","开源项目"); + params.put("userId","2f3c5337-cf1a-40ce-bbe3-ec45455d82f1"); + 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 67f27388510f3e7ca58a3104759d8e21e375c4fc Mon Sep 17 00:00:00 2001 From: liushujing Date: Thu, 27 Feb 2025 10:48:52 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=A1=A8=EF=BC=8C=E6=88=91=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E4=BA=BA=E8=AE=BE=E7=BD=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DigitalImgController.java | 86 +++++++++++++ .../controller/MyDigitalHumanController.java | 115 ++++++++++++++++++ .../pjilisense/flxai/dao/DigitalImgDao.java | 16 +++ .../flxai/dao/MyDigitalHumanDao.java | 16 +++ .../pjilisense/flxai/dto/DigitalImgDTO.java | 35 ++++++ .../flxai/dto/MyDigitalHumanDTO.java | 62 ++++++++++ .../flxai/entity/DigitalImgEntity.java | 34 ++++++ .../flxai/entity/MyDigitalHumanEntity.java | 70 +++++++++++ .../flxai/service/DigitalImgService.java | 15 +++ .../flxai/service/MyDigitalHumanService.java | 15 +++ .../flxai/service/impl/ChunksServiceImpl.java | 58 ++++++++- .../service/impl/DigitalImgServiceImpl.java | 34 ++++++ .../impl/MyDigitalHumanServiceImpl.java | 34 ++++++ .../mapper/postgres/DigitalImgDao.xml | 14 +++ .../mapper/postgres/MyDigitalHumanDao.xml | 23 ++++ 15 files changed, 624 insertions(+), 3 deletions(-) create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/controller/MyDigitalHumanController.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dao/DigitalImgDao.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dao/MyDigitalHumanDao.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dto/DigitalImgDTO.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/dto/MyDigitalHumanDTO.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/entity/DigitalImgEntity.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/entity/MyDigitalHumanEntity.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/DigitalImgService.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/MyDigitalHumanService.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/impl/DigitalImgServiceImpl.java create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/service/impl/MyDigitalHumanServiceImpl.java create mode 100644 flx-ai/src/main/resources/mapper/postgres/DigitalImgDao.xml create mode 100644 flx-ai/src/main/resources/mapper/postgres/MyDigitalHumanDao.xml diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java new file mode 100644 index 0000000..3dd3a8f --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java @@ -0,0 +1,86 @@ +package com.pjilisense.flxai.controller; + +import com.pjilisense.flxai.base.constant.Constant; +import com.pjilisense.flxai.page.PageData; +import com.pjilisense.flxai.utils.Result; +import com.pjilisense.flxai.dto.DigitalImgDTO; +import com.pjilisense.flxai.service.DigitalImgService; +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-02-26 + */ +@RestController +@RequestMapping(Constant.BASE_PATH+"digitalimg") +@Api(tags="${comments}") +public class DigitalImgController { + + private static Logger logger = LoggerFactory.getLogger(DigitalImgController.class); + + @Autowired + private DigitalImgService digitalImgService; + + @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 = digitalImgService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @ApiOperation("信息") + public Result get(@PathVariable("id") Long id){ + DigitalImgDTO data = digitalImgService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @ApiOperation("保存") + public Result save(@RequestBody DigitalImgDTO dto){ + digitalImgService.save(dto); + + return new Result(); + } + + @PutMapping + @ApiOperation("修改") + public Result update(@RequestBody DigitalImgDTO dto){ + digitalImgService.update(dto); + + return new Result(); + } + + @DeleteMapping + @ApiOperation("删除") + public Result delete(@RequestBody String[] ids){ + + digitalImgService.delete(ids); + + return new Result(); + } + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/MyDigitalHumanController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/MyDigitalHumanController.java new file mode 100644 index 0000000..b20ee21 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/MyDigitalHumanController.java @@ -0,0 +1,115 @@ +package com.pjilisense.flxai.controller; + +import com.pjilisense.flxai.base.constant.Constant; +import com.pjilisense.flxai.page.PageData; +import com.pjilisense.flxai.utils.ExcelUtils; +import com.pjilisense.flxai.utils.Result; +import com.pjilisense.flxai.dto.MyDigitalHumanDTO; +import com.pjilisense.flxai.excel.MyDigitalHumanExcel; +import com.pjilisense.flxai.service.MyDigitalHumanService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authz.annotation.RequiresPermissions; +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-02-26 + */ +@RestController +@RequestMapping(Constant.BASE_PATH+"mydigitalhuman") +@Api(tags="${comments}") +public class MyDigitalHumanController { + + private static Logger logger = LoggerFactory.getLogger(MyDigitalHumanController.class); + + @Autowired + private MyDigitalHumanService myDigitalHumanService; + + @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) + }) + @RequiresPermissions("robot:mydigitalhuman:page") + public Result> page(@ApiIgnore @RequestParam Map params){ + PageData page = myDigitalHumanService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @ApiOperation("信息") + @RequiresPermissions("robot:mydigitalhuman:info") + public Result get(@PathVariable("id") Long id){ + MyDigitalHumanDTO data = myDigitalHumanService.get(id); + + return new Result().ok(data); + } + + @PostMapping + @ApiOperation("保存") + @LogOperation("保存") + @RequiresPermissions("robot:mydigitalhuman:save") + public Result save(@RequestBody MyDigitalHumanDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + + myDigitalHumanService.save(dto); + + return new Result(); + } + + @PutMapping + @ApiOperation("修改") + @LogOperation("修改") + @RequiresPermissions("robot:mydigitalhuman:update") + public Result update(@RequestBody MyDigitalHumanDTO dto){ + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + + myDigitalHumanService.update(dto); + + return new Result(); + } + + @DeleteMapping + @ApiOperation("删除") + @LogOperation("删除") + @RequiresPermissions("robot:mydigitalhuman:delete") + public Result delete(@RequestBody Long[] ids){ + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + + myDigitalHumanService.delete(ids); + + return new Result(); + } + + @GetMapping("export") + @ApiOperation("导出") + @LogOperation("导出") + @RequiresPermissions("robot:mydigitalhuman:export") + public void export(@ApiIgnore @RequestParam Map params, HttpServletResponse response) throws Exception { + List list = myDigitalHumanService.list(params); + + ExcelUtils.exportExcelToTarget(response, null, "${comments}", list, MyDigitalHumanExcel.class); + } + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dao/DigitalImgDao.java b/flx-ai/src/main/java/com/pjilisense/flxai/dao/DigitalImgDao.java new file mode 100644 index 0000000..e5152e1 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dao/DigitalImgDao.java @@ -0,0 +1,16 @@ +package com.pjilisense.flxai.dao; + +import com.pjilisense.flxai.base.dao.BaseDao; +import com.pjilisense.flxai.entity.DigitalImgEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +@Mapper +public interface DigitalImgDao extends BaseDao { + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dao/MyDigitalHumanDao.java b/flx-ai/src/main/java/com/pjilisense/flxai/dao/MyDigitalHumanDao.java new file mode 100644 index 0000000..3416e0a --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dao/MyDigitalHumanDao.java @@ -0,0 +1,16 @@ +package com.pjilisense.flxai.dao; + +import com.pjilisense.flxai.base.dao.BaseDao; +import com.pjilisense.flxai.entity.MyDigitalHumanEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +@Mapper +public interface MyDigitalHumanDao extends BaseDao { + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dto/DigitalImgDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/DigitalImgDTO.java new file mode 100644 index 0000000..d7d2878 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/DigitalImgDTO.java @@ -0,0 +1,35 @@ +package com.pjilisense.flxai.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +@Data +@ApiModel(value = "${comments}") +public class DigitalImgDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private String id; + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "图片存放的相对路径") + private String imgPath; + + @ApiModelProperty(value = "图片类型1数字人形象2数字人场景3数字人背景") + private String imgType; + + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dto/MyDigitalHumanDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/MyDigitalHumanDTO.java new file mode 100644 index 0000000..d08a12c --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/MyDigitalHumanDTO.java @@ -0,0 +1,62 @@ +package com.pjilisense.flxai.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +@Data +@ApiModel(value = "${comments}") +public class MyDigitalHumanDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private String id; + + @ApiModelProperty(value = "用户表ID") + private String userid; + + @ApiModelProperty(value = "数字形象ID数字图片表ID") + private String imageid; + + @ApiModelProperty(value = "场景ID数字图片表ID") + private String sceneimgid; + + @ApiModelProperty(value = "背景ID数字图片表ID") + private String bkimgid; + + @ApiModelProperty(value = "选择的声音ID") + private String voiceid; + + @ApiModelProperty(value = "声音的语言") + private String voicelanguage; + + @ApiModelProperty(value = "声音风格ID") + private String voicestyleid; + + @ApiModelProperty(value = "语速") + private String speedspeech; + + @ApiModelProperty(value = "语调") + private String intonation; + + @ApiModelProperty(value = "音量") + private String volume; + + @ApiModelProperty(value = "视频存放目录") + private String videodir; + + @ApiModelProperty(value = "声音存放目录") + private String voicedir; + + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/entity/DigitalImgEntity.java b/flx-ai/src/main/java/com/pjilisense/flxai/entity/DigitalImgEntity.java new file mode 100644 index 0000000..636ed88 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/entity/DigitalImgEntity.java @@ -0,0 +1,34 @@ +package com.pjilisense.flxai.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +@Data +@TableName("digital_img") +public class DigitalImgEntity { + + /** + * 主键 + */ + private String id; + /** + * 名称 + */ + private String name; + /** + * 图片存放的相对路径 + */ + private String imgPath; + /** + * 图片类型1数字人形象2数字人场景3数字人背景 + */ + private String imgType; +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/entity/MyDigitalHumanEntity.java b/flx-ai/src/main/java/com/pjilisense/flxai/entity/MyDigitalHumanEntity.java new file mode 100644 index 0000000..ba0aefe --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/entity/MyDigitalHumanEntity.java @@ -0,0 +1,70 @@ +package com.pjilisense.flxai.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +@Data +@TableName("my_digital_human") +public class MyDigitalHumanEntity { + + /** + * 主键 + */ + private String id; + /** + * 用户表ID + */ + private String userid; + /** + * 数字形象ID数字图片表ID + */ + private String imageid; + /** + * 场景ID数字图片表ID + */ + private String sceneimgid; + /** + * 背景ID数字图片表ID + */ + private String bkimgid; + /** + * 选择的声音ID + */ + private String voiceid; + /** + * 声音的语言 + */ + private String voicelanguage; + /** + * 声音风格ID + */ + private String voicestyleid; + /** + * 语速 + */ + private String speedspeech; + /** + * 语调 + */ + private String intonation; + /** + * 音量 + */ + private String volume; + /** + * 视频存放目录 + */ + private String videodir; + /** + * 声音存放目录 + */ + private String voicedir; +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/DigitalImgService.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/DigitalImgService.java new file mode 100644 index 0000000..09ffa24 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/DigitalImgService.java @@ -0,0 +1,15 @@ +package com.pjilisense.flxai.service; + +import com.pjilisense.flxai.base.service.CrudService; +import com.pjilisense.flxai.dto.DigitalImgDTO; +import com.pjilisense.flxai.entity.DigitalImgEntity; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +public interface DigitalImgService extends CrudService { + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/MyDigitalHumanService.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/MyDigitalHumanService.java new file mode 100644 index 0000000..b7ddadd --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/MyDigitalHumanService.java @@ -0,0 +1,15 @@ +package com.pjilisense.flxai.service; + +import com.pjilisense.flxai.base.service.CrudService; +import com.pjilisense.flxai.dto.MyDigitalHumanDTO; +import com.pjilisense.flxai.entity.MyDigitalHumanEntity; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +public interface MyDigitalHumanService extends CrudService { + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/ChunksServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/ChunksServiceImpl.java index 7cf44ac..c182fde 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/ChunksServiceImpl.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/ChunksServiceImpl.java @@ -37,10 +37,12 @@ public class ChunksServiceImpl extends CrudServiceImpl> search(String userid,String keyText) { + return search1( userid, keyText); + } + + private List> search1(String userid,String keyText) { Segment seg= HanLP.newSegment(); seg.enableCustomDictionary(false); -// String keyText="我爱北京天安门"; -// keyText="HanLP是由一系列NLP工具组成的开源项目,其中包含了中文分词、词性标注、命名实体识别等功能。"; List lst = seg.seg(keyText); ArrayList listWord=processTermList(lst); //ArrayList listSentence=processTermListx(lst); @@ -97,7 +99,57 @@ public class ChunksServiceImpl extends CrudServiceImpl> search2(String userid,String keyText) { + Segment seg= HanLP.newSegment(); + seg.enableCustomDictionary(false); + List lst = seg.seg(keyText); + ArrayList listWord=processTermList(lst); + LinkedHashSet set = new LinkedHashSet<>(); + set.addAll(listWord); + listWord.clear(); + ArrayList wordList=processTermList(lst); + wordList.addAll(set); + set.clear(); + HashMap map = new HashMap<>(); + map.put("userid",userid); + map.put("wordList",wordList); + List> list = baseDao.queryCsv(map); + List> listRet = new ArrayList<>() ; + if(list!=null && list.size()>0) { + ArrayList listText=processTermListN0Com(lst); + List idList = new ArrayList<>(); + for (Map mp: list){ + String ttext = String.valueOf(mp.get("text")); + List lst2 = seg.seg(ttext); + ArrayList listQuestion=processTermListN0Com(lst2); + double similarity =calculateSimilarity(listText, listQuestion); + BigDecimal bd = new BigDecimal(similarity); + if(bd.compareTo(BigDecimal.ZERO.stripTrailingZeros())==0){ + idList.add(String.valueOf(mp.get("id"))); + } else { + System.out.println(bd.toString()); + mp.put("similarity",bd.toString()); + } + } + for(Map mp: list){ + String id=String.valueOf(mp.get("id")); + if(!idList.contains(id)){ + listRet.add(mp); + } + } + list.clear(); + list.addAll(listRet); + Collections.sort(list, new Comparator>() { + @Override + public int compare(Map o1, Map o2) { + BigDecimal bd1 = new BigDecimal(String.valueOf(o1.get("similarity"))); + BigDecimal bd2 = new BigDecimal(String.valueOf(o2.get("similarity"))); + return bd1.compareTo(bd2)*(-1); + } + }); + } + return list; + } private static ArrayList processTermList(List lst) { ArrayList ret = new ArrayList<>(); diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/DigitalImgServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/DigitalImgServiceImpl.java new file mode 100644 index 0000000..6b904a8 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/DigitalImgServiceImpl.java @@ -0,0 +1,34 @@ +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.DigitalImgDao; +import com.pjilisense.flxai.dto.DigitalImgDTO; +import com.pjilisense.flxai.entity.DigitalImgEntity; +import com.pjilisense.flxai.service.DigitalImgService; +import cn.hutool.core.util.StrUtil; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +@Service +public class DigitalImgServiceImpl extends CrudServiceImpl implements DigitalImgService { + + @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; + } + + +} \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/MyDigitalHumanServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/MyDigitalHumanServiceImpl.java new file mode 100644 index 0000000..041eb31 --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/MyDigitalHumanServiceImpl.java @@ -0,0 +1,34 @@ +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.MyDigitalHumanDao; +import com.pjilisense.flxai.dto.MyDigitalHumanDTO; +import com.pjilisense.flxai.entity.MyDigitalHumanEntity; +import com.pjilisense.flxai.service.MyDigitalHumanService; +import cn.hutool.core.util.StrUtil; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * ${comments} + * + * @author liushujing liushujing@philisense.com + * @since 1.0.0 2025-02-26 + */ +@Service +public class MyDigitalHumanServiceImpl extends CrudServiceImpl implements MyDigitalHumanService { + + @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; + } + + +} \ No newline at end of file diff --git a/flx-ai/src/main/resources/mapper/postgres/DigitalImgDao.xml b/flx-ai/src/main/resources/mapper/postgres/DigitalImgDao.xml new file mode 100644 index 0000000..f9a06ed --- /dev/null +++ b/flx-ai/src/main/resources/mapper/postgres/DigitalImgDao.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/flx-ai/src/main/resources/mapper/postgres/MyDigitalHumanDao.xml b/flx-ai/src/main/resources/mapper/postgres/MyDigitalHumanDao.xml new file mode 100644 index 0000000..548645d --- /dev/null +++ b/flx-ai/src/main/resources/mapper/postgres/MyDigitalHumanDao.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 916954454c2efa15d13b2c1c34a072197836047f Mon Sep 17 00:00:00 2001 From: liushujing Date: Thu, 27 Feb 2025 11:17:57 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=A1=A8=EF=BC=8C=E6=88=91=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E4=BA=BA=E8=AE=BE=E7=BD=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MyDigitalHumanController.java | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/MyDigitalHumanController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/MyDigitalHumanController.java index b20ee21..487751f 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/controller/MyDigitalHumanController.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/MyDigitalHumanController.java @@ -2,16 +2,13 @@ package com.pjilisense.flxai.controller; import com.pjilisense.flxai.base.constant.Constant; import com.pjilisense.flxai.page.PageData; -import com.pjilisense.flxai.utils.ExcelUtils; import com.pjilisense.flxai.utils.Result; import com.pjilisense.flxai.dto.MyDigitalHumanDTO; -import com.pjilisense.flxai.excel.MyDigitalHumanExcel; import com.pjilisense.flxai.service.MyDigitalHumanService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @@ -47,7 +44,6 @@ public class MyDigitalHumanController { @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) }) - @RequiresPermissions("robot:mydigitalhuman:page") public Result> page(@ApiIgnore @RequestParam Map params){ PageData page = myDigitalHumanService.page(params); @@ -56,7 +52,6 @@ public class MyDigitalHumanController { @GetMapping("{id}") @ApiOperation("信息") - @RequiresPermissions("robot:mydigitalhuman:info") public Result get(@PathVariable("id") Long id){ MyDigitalHumanDTO data = myDigitalHumanService.get(id); @@ -65,11 +60,7 @@ public class MyDigitalHumanController { @PostMapping @ApiOperation("保存") - @LogOperation("保存") - @RequiresPermissions("robot:mydigitalhuman:save") public Result save(@RequestBody MyDigitalHumanDTO dto){ - //效验数据 - ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); myDigitalHumanService.save(dto); @@ -78,11 +69,7 @@ public class MyDigitalHumanController { @PutMapping @ApiOperation("修改") - @LogOperation("修改") - @RequiresPermissions("robot:mydigitalhuman:update") public Result update(@RequestBody MyDigitalHumanDTO dto){ - //效验数据 - ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); myDigitalHumanService.update(dto); @@ -91,25 +78,11 @@ public class MyDigitalHumanController { @DeleteMapping @ApiOperation("删除") - @LogOperation("删除") - @RequiresPermissions("robot:mydigitalhuman:delete") public Result delete(@RequestBody Long[] ids){ - //效验数据 - AssertUtils.isArrayEmpty(ids, "id"); myDigitalHumanService.delete(ids); return new Result(); } - @GetMapping("export") - @ApiOperation("导出") - @LogOperation("导出") - @RequiresPermissions("robot:mydigitalhuman:export") - public void export(@ApiIgnore @RequestParam Map params, HttpServletResponse response) throws Exception { - List list = myDigitalHumanService.list(params); - - ExcelUtils.exportExcelToTarget(response, null, "${comments}", list, MyDigitalHumanExcel.class); - } - } \ No newline at end of file From 12bcc9f5038aa573d4da8269c67af8fef83d3735 Mon Sep 17 00:00:00 2001 From: liushujing Date: Thu, 27 Feb 2025 17:20:45 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=EF=BC=8C=E6=88=91=E7=9A=84=E6=95=B0=E5=AD=97=E4=BA=BA=E5=BD=A2?= =?UTF-8?q?=E8=B1=A1=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DigitalImgController.java | 34 +++- .../flxai/dto/MyDigitalHumanDTO.java | 18 +-- .../flxai/entity/MyDigitalHumanEntity.java | 22 +-- .../com/pjilisense/flxai/utils/FileUtil.java | 146 ++++++++++++++++++ flx-ai/src/main/resources/application.yml | 9 +- 5 files changed, 193 insertions(+), 36 deletions(-) create mode 100644 flx-ai/src/main/java/com/pjilisense/flxai/utils/FileUtil.java diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java index 3dd3a8f..427f2d6 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java @@ -2,6 +2,7 @@ package com.pjilisense.flxai.controller; import com.pjilisense.flxai.base.constant.Constant; import com.pjilisense.flxai.page.PageData; +import com.pjilisense.flxai.utils.FileUtil; import com.pjilisense.flxai.utils.Result; import com.pjilisense.flxai.dto.DigitalImgDTO; import com.pjilisense.flxai.service.DigitalImgService; @@ -10,12 +11,18 @@ 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.util.StringUtils; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import java.util.Map; @@ -36,6 +43,31 @@ public class DigitalImgController { @Autowired private DigitalImgService digitalImgService; + @Autowired + FileUtil fileUtil; + @PostMapping("/uploadPicture") + public Result uploadPicture(@RequestParam("file") MultipartFile file) { + if (file.isEmpty()) { + return new Result().error("文件为空"); + } + try { + String relfilename =fileUtil.uploadFile(file); + return new Result().ok(relfilename); + } catch (RuntimeException e) { + return new Result().error("上传失败: " + e.getMessage()); + } + } + @PostMapping("/getPicture") + public void getPicture(HttpServletResponse response,@RequestParam(name = "id", required = true) String id) { + try { + DigitalImgDTO data = digitalImgService.get(id); + if(StringUtils.hasText(data.getImgPath())) { + fileUtil.downLoadFile(data.getImgPath(), null, response); + } + } catch (RuntimeException e) { + } + } + @GetMapping("page") @ApiOperation("分页") @ApiImplicitParams({ @@ -52,7 +84,7 @@ public class DigitalImgController { @GetMapping("{id}") @ApiOperation("信息") - public Result get(@PathVariable("id") Long id){ + public Result get(@PathVariable("id") String id){ DigitalImgDTO data = digitalImgService.get(id); return new Result().ok(data); diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/dto/MyDigitalHumanDTO.java b/flx-ai/src/main/java/com/pjilisense/flxai/dto/MyDigitalHumanDTO.java index d08a12c..7a27ab4 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/dto/MyDigitalHumanDTO.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/dto/MyDigitalHumanDTO.java @@ -12,7 +12,7 @@ import java.util.Date; * ${comments} * * @author liushujing liushujing@philisense.com - * @since 1.0.0 2025-02-26 + * @since 1.0.0 2025-02-27 */ @Data @ApiModel(value = "${comments}") @@ -37,20 +37,8 @@ public class MyDigitalHumanDTO implements Serializable { @ApiModelProperty(value = "选择的声音ID") private String voiceid; - @ApiModelProperty(value = "声音的语言") - private String voicelanguage; - - @ApiModelProperty(value = "声音风格ID") - private String voicestyleid; - - @ApiModelProperty(value = "语速") - private String speedspeech; - - @ApiModelProperty(value = "语调") - private String intonation; - - @ApiModelProperty(value = "音量") - private String volume; + @ApiModelProperty(value = "编辑后的图片") + private String videoimg; @ApiModelProperty(value = "视频存放目录") private String videodir; diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/entity/MyDigitalHumanEntity.java b/flx-ai/src/main/java/com/pjilisense/flxai/entity/MyDigitalHumanEntity.java index ba0aefe..3b33153 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/entity/MyDigitalHumanEntity.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/entity/MyDigitalHumanEntity.java @@ -9,7 +9,7 @@ import java.util.Date; * ${comments} * * @author liushujing liushujing@philisense.com - * @since 1.0.0 2025-02-26 + * @since 1.0.0 2025-02-27 */ @Data @TableName("my_digital_human") @@ -40,25 +40,9 @@ public class MyDigitalHumanEntity { */ private String voiceid; /** - * 声音的语言 + * 编辑后的图片 */ - private String voicelanguage; - /** - * 声音风格ID - */ - private String voicestyleid; - /** - * 语速 - */ - private String speedspeech; - /** - * 语调 - */ - private String intonation; - /** - * 音量 - */ - private String volume; + private String videoimg; /** * 视频存放目录 */ diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/utils/FileUtil.java b/flx-ai/src/main/java/com/pjilisense/flxai/utils/FileUtil.java new file mode 100644 index 0000000..da2d5fc --- /dev/null +++ b/flx-ai/src/main/java/com/pjilisense/flxai/utils/FileUtil.java @@ -0,0 +1,146 @@ +package com.pjilisense.flxai.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Repository; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.*; + +@Repository +public class FileUtil { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Value("${file.common.uploadWindow}") + private String diskPath; + @Value("${file.common.uploadLinux}") + private String uploadLinux; + + @Value("${file.common.uploadUrl}") + private String uploadUrl; + + public String uploadFile(MultipartFile multipartFile){ + String relPath="uploads/"; + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); + relPath = relPath+sdf.format(new Date()).substring(0,6)+"/"; + //⽂件的完整名称,如spring.jpeg + String filename = multipartFile.getOriginalFilename(); + //⽂件后缀,如.jpeg + assert filename != null; + String suffix = filename.substring(filename.lastIndexOf(".")); + relPath =relPath+"/"+UUID.randomUUID().toString().replace("-","")+"."+suffix; + //⽬标⽂件 + File descFile = new File(getFilepath(relPath)); + //判断⽬标⽂件所在的⽬录是否存在 + if (!descFile.getParentFile().exists()) { + descFile.getParentFile().mkdirs(); + } + try (InputStream is = multipartFile.getInputStream(); + BufferedInputStream bis = new BufferedInputStream(is); + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(descFile))) { + int num = 0; + while ((num = bis.read()) != -1) { + bos.write(num); + } + } catch (Exception e) { + //log.error(e.getMessage()); + throw new RuntimeException("文件上传错误,请联系管理员"); + } + return relPath; + } + + /** + * + * @return int 删除结果 1 已删除 0 未删除 + */ + public int delFile(String filepath, String fileName) { + String rootPath = getFilepath (filepath); + File file = new File(rootPath); + if (file.exists()) { + if(file.isDirectory()) { + File filex = new File(rootPath+"/"+fileName); + if(filex.exists()) { + filex.delete(); + } + return 1; + } else { + file.delete(); + return 1; + } + } + return 0; + } + + public void downLoadFile(String filepath, String filename, HttpServletResponse response){ + String rootPath = getFilepath (filepath); + File file = new File(rootPath); + if(file.exists()){ + InputStream inputStream = null; + OutputStream outputStream = null; + try { + // 读到流中 + if(file.isDirectory()) { + inputStream = new FileInputStream(filepath +"/"+ filename);// 文件的存放路径 + } else { + inputStream = new FileInputStream(filepath);//filepath可能包含文件名 + } + response.reset(); + response.setContentType("application/octet-stream"); + response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8")); + outputStream = response.getOutputStream(); + byte[] b = new byte[1024]; + int len; + //从输入流中读取一定数量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1 + while ((len = inputStream.read(b)) > 0) { + outputStream.write(b, 0, len); + } + } catch (IOException e) { + //log.error(e.getMessage(), e); + }finally { + try { + inputStream.close(); + inputStream.close(); + } catch (IOException e) { + //log.error(e.getMessage(), e); + } + } + } + } + + public String getFilepath (final String filepath) {//filepath可能包含文件名 + String rootPath = getRootpath(); + rootPath = rootPath +"/"+ filepath; + rootPath =rootPath.replace("//","/"); + if(rootPath.endsWith("/")){ + rootPath=rootPath.substring(0,rootPath.length()-1); + } + return rootPath; + } + + public String getRootpath () {//filepath可能包含文件名 + String rootPath = null; + if (System.getProperty("os.name").startsWith("Windows")) { + rootPath = diskPath; + } else if (System.getProperty("os.name").startsWith("Linux")) { + rootPath = uploadLinux; + } + rootPath =rootPath.replace("//","/"); + if(rootPath.endsWith("/")){ + rootPath=rootPath.substring(0,rootPath.length()-1); + } + return rootPath; + } + + +} diff --git a/flx-ai/src/main/resources/application.yml b/flx-ai/src/main/resources/application.yml index 26f77d5..b263511 100644 --- a/flx-ai/src/main/resources/application.yml +++ b/flx-ai/src/main/resources/application.yml @@ -60,4 +60,11 @@ mybatis-plus: configuration-properties: prefix: blobType: BLOB - boolValue: TRUE \ No newline at end of file + boolValue: TRUE +file: + common: + ## windows系统下访问路径 + uploadWindow: d:/ceshi/sysfile + ## Linux系统下访问路径 + uploadLinux: /user/img/ + uploadUrl: /upload/ From 7c56e7cd38647c48f57a978885d1c4acc82ba2c8 Mon Sep 17 00:00:00 2001 From: liushujing Date: Thu, 27 Feb 2025 17:22:15 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=EF=BC=8C=E6=88=91=E7=9A=84=E6=95=B0=E5=AD=97=E4=BA=BA=E5=BD=A2?= =?UTF-8?q?=E8=B1=A1=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/postgres/MyDigitalHumanDao.xml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/flx-ai/src/main/resources/mapper/postgres/MyDigitalHumanDao.xml b/flx-ai/src/main/resources/mapper/postgres/MyDigitalHumanDao.xml index 548645d..2640ae2 100644 --- a/flx-ai/src/main/resources/mapper/postgres/MyDigitalHumanDao.xml +++ b/flx-ai/src/main/resources/mapper/postgres/MyDigitalHumanDao.xml @@ -10,14 +10,20 @@ - - - - - + - + + + + + + + + + + + \ No newline at end of file From 05fa43df5405d1c55ddea9603e7c28ed4389f4ef Mon Sep 17 00:00:00 2001 From: liushujing Date: Fri, 28 Feb 2025 08:59:52 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flxai/controller/DigitalImgController.java | 8 ++++++++ .../pjilisense/flxai/service/DigitalImgService.java | 3 +++ .../flxai/service/impl/DigitalImgServiceImpl.java | 12 +++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java b/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java index 427f2d6..2ce3e8e 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/controller/DigitalImgController.java @@ -82,6 +82,14 @@ public class DigitalImgController { return new Result>().ok(page); } + @GetMapping("getAllByType") + @ApiOperation("根据类型获取全部数据") + public Result> getAllByType(@ApiIgnore @RequestParam String imgType){ + List page = digitalImgService.getAllByType(imgType); + + return new Result>().ok(page); + } + @GetMapping("{id}") @ApiOperation("信息") public Result get(@PathVariable("id") String id){ diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/DigitalImgService.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/DigitalImgService.java index 09ffa24..3e10d01 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/service/DigitalImgService.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/DigitalImgService.java @@ -4,6 +4,8 @@ import com.pjilisense.flxai.base.service.CrudService; import com.pjilisense.flxai.dto.DigitalImgDTO; import com.pjilisense.flxai.entity.DigitalImgEntity; +import java.util.List; + /** * ${comments} * @@ -12,4 +14,5 @@ import com.pjilisense.flxai.entity.DigitalImgEntity; */ public interface DigitalImgService extends CrudService { + List getAllByType(String imgType); } \ No newline at end of file diff --git a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/DigitalImgServiceImpl.java b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/DigitalImgServiceImpl.java index 6b904a8..c03d7f5 100644 --- a/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/DigitalImgServiceImpl.java +++ b/flx-ai/src/main/java/com/pjilisense/flxai/service/impl/DigitalImgServiceImpl.java @@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.pjilisense.flxai.base.service.impl.CrudServiceImpl; import com.pjilisense.flxai.dao.DigitalImgDao; import com.pjilisense.flxai.dto.DigitalImgDTO; +import com.pjilisense.flxai.entity.AppToolsSetEntity; import com.pjilisense.flxai.entity.DigitalImgEntity; import com.pjilisense.flxai.service.DigitalImgService; import cn.hutool.core.util.StrUtil; +import com.pjilisense.flxai.utils.ConvertUtils; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Map; /** @@ -30,5 +33,12 @@ public class DigitalImgServiceImpl extends CrudServiceImpl getAllByType(String imgType) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq(StrUtil.isNotBlank(imgType), "img_type", imgType); + wrapper.orderByAsc("id"); + List entityList =baseDao.selectList(wrapper); + return ConvertUtils.sourceToTarget(entityList, DigitalImgDTO.class); + } } \ No newline at end of file