src/main/java/cc/mrbird/febs/ai/controller/productPoint/ApiProductPointController.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/ai/req/productPoint/ApiProductPointRecommendDto.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/ai/res/productPoint/ApiProductPointRecommendVo.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/ai/service/AiProductPointService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java | ●●●●● patch | view | raw | blame | history |
src/main/java/cc/mrbird/febs/ai/controller/productPoint/ApiProductPointController.java
@@ -1,13 +1,16 @@ package cc.mrbird.febs.ai.controller.productPoint; import cc.mrbird.febs.ai.req.memberTalkStream.ApiMemberTalkReloadStreamDto; import cc.mrbird.febs.ai.req.product.ApiProductInfoDto; import cc.mrbird.febs.ai.req.product.ApiProductPageDto; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointInfoDto; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointPageDto; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointRecommendDto; import cc.mrbird.febs.ai.res.product.ApiProductInfoVo; import cc.mrbird.febs.ai.res.product.ApiProductVo; import cc.mrbird.febs.ai.res.productPoint.ApiProductPointInfoVo; import cc.mrbird.febs.ai.res.productPoint.ApiProductPointListVo; import cc.mrbird.febs.ai.res.productPoint.ApiProductPointRecommendVo; import cc.mrbird.febs.ai.service.AiProductPointService; import cc.mrbird.febs.common.entity.FebsResponse; import io.swagger.annotations.Api; @@ -55,4 +58,15 @@ return aiProductPointService.productPointInfo(dto); } @ApiOperation(value = "推荐", notes = "推荐") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiProductPointRecommendVo.class) }) @PostMapping(value = "/recommend") public FebsResponse recommend(@RequestBody @Validated ApiProductPointRecommendDto dto) { return aiProductPointService.recommend(dto); } } src/main/java/cc/mrbird/febs/ai/req/productPoint/ApiProductPointRecommendDto.java
New file @@ -0,0 +1,16 @@ package cc.mrbird.febs.ai.req.productPoint; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; @Data @ApiModel(value = "ApiProductPointRecommendDto", description = "参数") public class ApiProductPointRecommendDto { @NotNull(message = "会话ID不能为空") @ApiModelProperty(value = "会话ID", example = "1") private String memberTalkId; } src/main/java/cc/mrbird/febs/ai/res/productPoint/ApiProductPointRecommendVo.java
New file @@ -0,0 +1,19 @@ package cc.mrbird.febs.ai.res.productPoint; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "ApiProductPointRecommendVo", description = "参数") public class ApiProductPointRecommendVo { @ApiModelProperty(value = "知识点ID") private String id; /** * 名称 */ @ApiModelProperty(value = "名称") private String title; } src/main/java/cc/mrbird/febs/ai/service/AiProductPointService.java
@@ -3,6 +3,7 @@ import cc.mrbird.febs.ai.entity.AiProductPoint; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointInfoDto; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointPageDto; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointRecommendDto; import cc.mrbird.febs.ai.res.productPoint.ApiProductPointVo; import cc.mrbird.febs.common.entity.FebsResponse; import com.baomidou.mybatisplus.extension.service.IService; @@ -25,4 +26,6 @@ FebsResponse productPointList(ApiProductPointPageDto dto); FebsResponse productPointInfo(ApiProductPointInfoDto dto); FebsResponse recommend(ApiProductPointRecommendDto dto); } src/main/java/cc/mrbird/febs/ai/service/impl/AiProductPointServiceImpl.java
@@ -1,14 +1,13 @@ package cc.mrbird.febs.ai.service.impl; import cc.mrbird.febs.ai.entity.AiMemberRoleProduct; import cc.mrbird.febs.ai.entity.AiProduct; import cc.mrbird.febs.ai.entity.AiProductPoint; import cc.mrbird.febs.ai.entity.AiProductPointLink; import cc.mrbird.febs.ai.entity.*; import cc.mrbird.febs.ai.mapper.AiProductPointMapper; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointInfoDto; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointPageDto; import cc.mrbird.febs.ai.req.productPoint.ApiProductPointRecommendDto; import cc.mrbird.febs.ai.res.productPoint.ApiProductPointInfoVo; import cc.mrbird.febs.ai.res.productPoint.ApiProductPointListVo; import cc.mrbird.febs.ai.res.productPoint.ApiProductPointRecommendVo; import cc.mrbird.febs.ai.res.productPoint.ApiProductPointVo; import cc.mrbird.febs.ai.service.*; import cc.mrbird.febs.common.entity.FebsResponse; @@ -43,6 +42,7 @@ private final AiProductPointLinkService aiProductPointLinkService; private final AiProductCategoryService aiProductCategoryService; private final AiMemberRoleService aiMemberRoleService; private final AiMemberTalkService aiMemberTalkService; @Override public AiProductPoint getById(String id) { @@ -112,4 +112,44 @@ } return new FebsResponse().success().data(apiProductPointInfoVo); } @Override public FebsResponse recommend(ApiProductPointRecommendDto dto) { List<ApiProductPointRecommendVo> vos = new ArrayList<>(); String memberTalkId = dto.getMemberTalkId(); AiMemberTalk aiMemberTalk = aiMemberTalkService.getById(memberTalkId); if (ObjectUtil.isNotNull(aiMemberTalk)){ return new FebsResponse().success().data(vos); } String productId = aiMemberTalk.getProductId(); List<AiProductPointLink> aiProductPointLinkList = aiProductPointLinkService.getListByProductId( Wrappers.lambdaQuery(AiProductPointLink.class) .eq(AiProductPointLink::getProductId, productId) ); if (CollUtil.isEmpty(aiProductPointLinkList)){ return new FebsResponse().success().data(vos); } //stream流操作aiProductPointLinkList,返回一个Set<productPointId>的set集合 Set<String> productPointIdSet = aiProductPointLinkList.stream().map(AiProductPointLink::getProductPointId).collect(Collectors.toSet()); List<AiProductPoint> listByPointIds = aiProductPointMapper.selectList( Wrappers.lambdaQuery(AiProductPoint.class) .select(AiProductPoint::getId,AiProductPoint::getTitle) .in(AiProductPoint::getId, productPointIdSet) ); if (CollUtil.isEmpty(listByPointIds)){ return new FebsResponse().success().data(vos); } for (AiProductPoint aiProductPoint : listByPointIds){ ApiProductPointRecommendVo vo = new ApiProductPointRecommendVo(); vo.setId(aiProductPoint.getId()); vo.setTitle(aiProductPoint.getTitle()); vos.add(vo); } return new FebsResponse().success().data(vos); } }