src/main/java/cc/mrbird/febs/ai/req/product/ApiProductPageDto.java
@@ -27,6 +27,9 @@ @ApiModelProperty(value = "公司ID", example = "123") private String companyId; @ApiModelProperty(value = "会员ID", example = "123") private String memberId; @ApiModelProperty(value = "角色ID", example = "123") private String memberRoleId; } src/main/java/cc/mrbird/febs/ai/res/product/ApiProductVo.java
@@ -31,4 +31,10 @@ @ApiModelProperty(value = "图片") private String iconImg; /** * 小图标 */ @ApiModelProperty(value = "状态 0-已锁定 1-已解锁") private Integer state = 1; } src/main/java/cc/mrbird/febs/ai/service/AiMemberProductUnlockService.java
@@ -3,5 +3,14 @@ import cc.mrbird.febs.ai.entity.AiMemberProductUnlock; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; import java.util.Set; public interface AiMemberProductUnlockService extends IService<AiMemberProductUnlock> { List<AiMemberProductUnlock> selectListByMemberId(String memberId); List<AiMemberProductUnlock> selectListByProductIds(Set<String> targetProductIds,String memberId); void insertList(String companyId, Set<String> unlockProductIds, String memberUuid, int intValue); } src/main/java/cc/mrbird/febs/ai/service/AiProductDependencyService.java
@@ -3,5 +3,14 @@ import cc.mrbird.febs.ai.entity.AiProductDependency; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; import java.util.Set; public interface AiProductDependencyService extends IService<AiProductDependency> { List<AiProductDependency> selectListByProductIds(Set<String> productIds); List<AiProductDependency> selectListByProductId(String productId); List<AiProductDependency> selectListByProductId(String productId, int intValue); } src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
@@ -32,6 +32,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * AI用户答题记录 Service实现类 @@ -49,6 +51,8 @@ private final AiProductService aiProductService; private final AiProductQuestionService aiProductQuestionService; private final AiProductQuestionItemService aiProductQuestionItemService; private final AiProductDependencyService aiProductDependencyService; private final AiMemberProductUnlockService aiMemberProductUnlockService; @Override @@ -305,6 +309,7 @@ @Override public FebsResponse insure(ApiMemberAnswerInsureDto dto) { String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); String companyId = LoginUserUtil.getLoginUser().getCompanyId(); ApiMemberAnswerInsureVo apiMemberAnswerInsureVo = new ApiMemberAnswerInsureVo(); String memberAnswerId = dto.getMemberAnswerId(); @@ -332,6 +337,22 @@ .set(AiMemberAnswer::getScore, percentage.intValue()) .eq(AiMemberAnswer::getId, memberAnswerId) ); //如果有升级规则,则解锁 List<AiProductDependency> aiProductDependencies = aiProductDependencyService.selectListByProductId(aiMemberAnswer.getProductId(),percentage.intValue()); if (CollUtil.isNotEmpty(aiProductDependencies)){ //stream流操作aiProductDependencies,获取全部的targetProductId Set<String> targetProductIds = aiProductDependencies.stream().map(AiProductDependency::getTargetProductId).collect(Collectors.toSet()); List<AiMemberProductUnlock> aiMemberProductUnlocks = aiMemberProductUnlockService.selectListByProductIds(targetProductIds, memberUuid); Set<String> doneProductIds = aiMemberProductUnlocks.stream().map(AiMemberProductUnlock::getProductId).collect(Collectors.toSet()); //获取在targetProductIds集合中,并且不在doneProductIds集合中的productId Set<String> unlockProductIds = targetProductIds.stream().filter(productId -> !doneProductIds.contains(productId)).collect(Collectors.toSet()); if (CollUtil.isNotEmpty(unlockProductIds)){ aiMemberProductUnlockService.insertList(companyId,unlockProductIds, memberUuid,percentage.intValue()); } } return new FebsResponse().success().data(apiMemberAnswerInsureVo); } src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberProductUnlockServiceImpl.java
@@ -3,13 +3,51 @@ import cc.mrbird.febs.ai.entity.AiMemberProductUnlock; import cc.mrbird.febs.ai.mapper.AiMemberProductUnlockMapper; import cc.mrbird.febs.ai.service.AiMemberProductUnlockService; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.Set; @Slf4j @Service @RequiredArgsConstructor public class AiMemberProductUnlockServiceImpl extends ServiceImpl<AiMemberProductUnlockMapper, AiMemberProductUnlock> implements AiMemberProductUnlockService { private final AiMemberProductUnlockMapper aiMemberProductUnlockMapper; @Override public List<AiMemberProductUnlock> selectListByMemberId(String memberId) { return aiMemberProductUnlockMapper.selectList( Wrappers.lambdaQuery(AiMemberProductUnlock.class) .eq(AiMemberProductUnlock::getMemberId, memberId) ); } @Override public List<AiMemberProductUnlock> selectListByProductIds(Set<String> targetProductIds, String memberId) { return aiMemberProductUnlockMapper.selectList( Wrappers.lambdaQuery(AiMemberProductUnlock.class) .eq(AiMemberProductUnlock::getMemberId, memberId) .in(AiMemberProductUnlock::getProductId, targetProductIds) ); } @Override public void insertList(String companyId, Set<String> unlockProductIds, String memberUuid, int intValue) { unlockProductIds.forEach(productId -> { AiMemberProductUnlock unlock = new AiMemberProductUnlock(); unlock.setCompanyId(companyId); unlock.setProductId(productId); unlock.setMemberId(memberUuid); unlock.setUnlockScore(intValue); unlock.setCreatedTime(new Date()); this.save(unlock); }); } } src/main/java/cc/mrbird/febs/ai/service/impl/AiProductDependencyServiceImpl.java
@@ -3,13 +3,45 @@ import cc.mrbird.febs.ai.entity.AiProductDependency; import cc.mrbird.febs.ai.mapper.AiProductDependencyMapper; import cc.mrbird.febs.ai.service.AiProductDependencyService; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; import java.util.Set; @Slf4j @Service @RequiredArgsConstructor public class AiProductDependencyServiceImpl extends ServiceImpl<AiProductDependencyMapper, AiProductDependency> implements AiProductDependencyService { private final AiProductDependencyMapper aiProductDependencyMapper; @Override public List<AiProductDependency> selectListByProductIds(Set<String> productIds) { return aiProductDependencyMapper.selectList( Wrappers.lambdaQuery(AiProductDependency.class) .in(AiProductDependency::getTargetProductId, productIds) ); } @Override public List<AiProductDependency> selectListByProductId(String productId) { return aiProductDependencyMapper.selectList( Wrappers.lambdaQuery(AiProductDependency.class) .eq(AiProductDependency::getPrerequisiteProductId, productId) ); } @Override public List<AiProductDependency> selectListByProductId(String productId, int intValue) { return aiProductDependencyMapper.selectList( Wrappers.lambdaQuery(AiProductDependency.class) .eq(AiProductDependency::getPrerequisiteProductId, productId) .ge(AiProductDependency::getRequiredScore, intValue) ); } } src/main/java/cc/mrbird/febs/ai/service/impl/AiProductServiceImpl.java
@@ -1,6 +1,8 @@ package cc.mrbird.febs.ai.service.impl; import cc.mrbird.febs.ai.entity.AiMemberProductUnlock; import cc.mrbird.febs.ai.entity.AiProduct; import cc.mrbird.febs.ai.entity.AiProductDependency; import cc.mrbird.febs.ai.entity.AiProductPoint; import cc.mrbird.febs.ai.mapper.AiProductMapper; import cc.mrbird.febs.ai.req.product.ApiProductInfoDto; @@ -11,6 +13,7 @@ import cc.mrbird.febs.ai.service.*; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.exception.FebsException; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -21,6 +24,9 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * AI产品表 Service实现类 @@ -37,6 +43,8 @@ private final AiMemberRoleService aiMemberRoleService; private final AiProductCategoryService aiProductCategoryService; private final AiProductPointService aiProductPointService; private final AiProductDependencyService aiProductDependencyService; private final AiMemberProductUnlockService aiMemberProductUnlockService; @Override @@ -64,6 +72,36 @@ // 创建分页对象,传入当前页和每页大小 Page<ApiProductVo> page = new Page<>(dto.getPageNow(), dto.getPageSize()); Page<ApiProductVo> pageListByQuery = this.getPageListByQuery(page, dto); List<ApiProductVo> records = pageListByQuery.getRecords(); if (CollUtil.isNotEmpty( records)){ //stream流操作records,返回一个id的集合 Set<String> productIds = records.stream().map(ApiProductVo::getId).collect(Collectors.toSet()); List<AiProductDependency> aiProductDependencies = aiProductDependencyService.selectListByProductIds(productIds); if (CollUtil.isNotEmpty( aiProductDependencies)){ //stream流操作aiProductDependencies,返回一个Map<targetProductId,AiProductDependency> Map<String, AiProductDependency> targetProductIdAiProductDependencyMap = aiProductDependencies.stream().collect(Collectors.toMap(AiProductDependency::getTargetProductId, aiProductDependency -> aiProductDependency)); for (ApiProductVo record : records){ if (targetProductIdAiProductDependencyMap.containsKey(record.getId())){ record.setState(0); } } } if (StrUtil.isNotEmpty(dto.getMemberId())){ List<AiMemberProductUnlock> aiMemberProductUnlocks = aiMemberProductUnlockService.selectListByMemberId(dto.getMemberId()); if (CollUtil.isNotEmpty( aiMemberProductUnlocks)){ //stream流操作aiMemberProductUnlocks,返回一个Map<targetProductId,AiMemberProductUnlock> Map<String, AiMemberProductUnlock> aiMemberProductUnlocksMap = aiMemberProductUnlocks.stream().collect(Collectors.toMap(AiMemberProductUnlock::getProductId, aiMemberProductUnlock -> aiMemberProductUnlock)); for (ApiProductVo record : records){ if (aiMemberProductUnlocksMap.containsKey(record.getId())){ record.setState(1); } } } } } return new FebsResponse().success().data(pageListByQuery); }