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