Administrator
20 hours ago a364bbbe17f281dd52af550886e06afd79034853
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberServiceImpl.java
@@ -11,10 +11,12 @@
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.mall.entity.MallMember;
import cc.mrbird.febs.mall.entity.MallMemberCollection;
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -41,7 +43,9 @@
    private final AiMemberPointService aiMemberPointService;
    private final AiProductService aiProductService;
    private final AiProductPointService aiProductPointService;
    private final AiProductQuestionService aiProductQuestionService;
    private final AiProductQuestionItemService aiProductQuestionItemService;
    private final AiProductQuestionLinkService aiProductQuestionLinkService;
    @Override
    public AiMember getById(String id) {
        return aiMemberMapper.selectById( id);
@@ -206,6 +210,7 @@
            String productId = aiProduct.getId();
            ApiMemberTeamPracticeVo vo = new ApiMemberTeamPracticeVo();
            vo.setMemberUuid(memberUuid);
            vo.setProductId(aiProduct.getId());
            vo.setName(aiProduct.getName());
            vo.setTarget(aiProduct.getTarget());
@@ -287,13 +292,27 @@
    }
    @Override
    public FebsResponse talkPage(ApiMemberTalkPageDto dto) {
        String companyId = LoginUserUtil.getLoginUser().getCompanyId();
        dto.setCompanyId(companyId);
        // 创建分页对象,传入当前页和每页大小
        Page<ApiMemberTalkPageVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        Page<ApiMemberTalkPageVo> pages = aiMemberTalkService.getTalkPage(page, dto);
        return new FebsResponse().success().data(pages);
    }
    @Override
    public FebsResponse answerPage(ApiMemberAnswerPageDto dto) {
        String companyId = LoginUserUtil.getLoginUser().getCompanyId();
        dto.setCompanyId(companyId);
        // 创建分页对象,传入当前页和每页大小
        Page<ApiMemberAnswerPageVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        Page<ApiMemberAnswerPageVo> aiMemberAnswerPage = aiMemberAnswerService.getAnswerPage(page, dto);
        Page<ApiMemberAnswerPageVo> pages = aiMemberAnswerService.getAnswerPage(page, dto);
        return new FebsResponse().success().data(aiMemberAnswerPage);
        return new FebsResponse().success().data(pages);
    }
    @Override
@@ -332,7 +351,7 @@
                    vo.setMemberAnswerQuestionId(record.getMemberAnswerQuestionId());
                    vo.setAnswerAnalysis(record.getAnswerAnalysis());
                    vo.setProductQuestionId(record.getProductQuestionId());
                    vo.setCreatedTime(record.getCreatedTime());
                    vo.setCreatedTime(record.getUpdatedTime());
                    List<AiProductQuestionItem> questionItemList = questionItemMap.get(productQuestionId);
@@ -356,4 +375,144 @@
        return new FebsResponse().success().data(vos);
    }
    @Override
    public FebsResponse studyList(ApiCompanyStudyDto dto) {
        String companyId = LoginUserUtil.getLoginUser().getCompanyId();
        String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
        Integer checkOrder = LoginUserUtil.getLoginUser().getCheckOrder();
        if (1 != checkOrder){
            throw new FebsException("非管理员,无权限查看");
        }
        dto.setMemberUuid( memberUuid);
        dto.setCompanyId( companyId);
        // 创建分页对象,传入当前页和每页大小
        Page<ApiCompanyStudyVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        IPage<ApiCompanyStudyVo> result = aiMemberAnswerService.selectListPage(dto, page);
        return new FebsResponse().success().data(result);
    }
    @Override
    public FebsResponse studyPercentList(ApiCompanyStudyPercentDto dto) {
        List<ApiCompanyStudyPercentVo> objects = new ArrayList<>();
        String companyId = LoginUserUtil.getLoginUser().getCompanyId();
        String productId = dto.getProductId();
        LambdaQueryWrapper<AiProductQuestionLink> aiProductQuestionLinkLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestionLink.class);
        aiProductQuestionLinkLambdaQueryWrapper.eq(AiProductQuestionLink::getProductId, productId);
        aiProductQuestionLinkLambdaQueryWrapper.eq(AiProductQuestionLink::getCompanyId, companyId);
        List<AiProductQuestionLink> listByQuery = aiProductQuestionLinkService.getListByQuery(aiProductQuestionLinkLambdaQueryWrapper);
        if ( CollUtil.isEmpty(listByQuery)){
            return  new FebsResponse().success().data(objects);
        }
        Set<String> productQuestionIdSet = listByQuery.stream().map(AiProductQuestionLink::getProductQuestionId).collect(Collectors.toSet());
        LambdaQueryWrapper<AiProductQuestion> questionQuery = Wrappers.lambdaQuery(AiProductQuestion.class);
        questionQuery.in(AiProductQuestion::getId,productQuestionIdSet);
        List<AiProductQuestion> aiProductQuestionList = aiProductQuestionService.getListByQuery(questionQuery);
        //利用stream流,操作集合aiProductQuestionList,返回一个map对象,key为productQuestionId,valueAiProductQuestion对象
         Map<String, AiProductQuestion> questionMap =
                aiProductQuestionList.stream().collect(Collectors.toMap(AiProductQuestion::getId, AiProductQuestion -> AiProductQuestion));
        LambdaQueryWrapper<AiProductQuestionItem> questionItemQuery = Wrappers.lambdaQuery(AiProductQuestionItem.class);
        questionItemQuery.in(AiProductQuestionItem::getProductQuestionId,productQuestionIdSet);
        questionItemQuery.eq(AiProductQuestionItem::getCompanyId,companyId);
        List<AiProductQuestionItem> aiProductQuestionItemList = aiProductQuestionItemService.getListByQuery(questionItemQuery);
        //利用stream流,操作集合listByQuery,返回一个map对象,key为productQuestionId,value为List<AiProductQuestionItem>对象
        Map<String, List<AiProductQuestionItem>> questionItemMap =
                aiProductQuestionItemList.stream().collect(Collectors.groupingBy(AiProductQuestionItem::getProductQuestionId));
        //stream流,aiProductQuestionItemList返回ID的set集合
         Set<String> questionItemIdSet = aiProductQuestionItemList.stream().map(AiProductQuestionItem::getId).collect(Collectors.toSet());
        LambdaQueryWrapper<AiMemberAnswerItem> memberAnswerItemLambdaQueryWrapper = Wrappers.lambdaQuery(AiMemberAnswerItem.class);
        memberAnswerItemLambdaQueryWrapper.in(AiMemberAnswerItem::getMemberAnswerQuestionId,questionItemIdSet);
        memberAnswerItemLambdaQueryWrapper.eq(AiMemberAnswerItem::getCompanyId,companyId);
        List<AiMemberAnswerItem> memberAnswerItemList = aiMemberAnswerItemService.getListByQuery(memberAnswerItemLambdaQueryWrapper);
        //利用stream流,操作集合memberAnswerItemList,返回一个map对象,key为memberAnswerQuestionId,value为按照memberAnswerQuestionId分组的集合的大小,默认值为0
        Map<String, Long> memberAnswerItemCountMap =
                memberAnswerItemList
                        .stream()
                        .collect(Collectors.groupingBy(
                                AiMemberAnswerItem::getMemberAnswerQuestionId,
                                Collectors.counting()
                        ));
        for (String productQuestionId : productQuestionIdSet){
            ApiCompanyStudyPercentVo vo = new ApiCompanyStudyPercentVo();
            vo.setProductQuestionId(productQuestionId);
            AiProductQuestion record = questionMap.get(productQuestionId);
            vo.setTitle(record.getTitle());
            vo.setDifficulty(record.getDifficulty());
            List<AiProductQuestionItem> questionItemList = questionItemMap.get(productQuestionId);
            List<ApiCompanyStudyPercentItemVo> answerList = new ArrayList<>();
            if (CollUtil.isNotEmpty(questionItemList)){
                for (AiProductQuestionItem questionItem : questionItemList){
                    ApiCompanyStudyPercentItemVo itemVo = new ApiCompanyStudyPercentItemVo();
                    itemVo.setId(questionItem.getId());
                    itemVo.setAnswer(questionItem.getAnswer());
                    itemVo.setAnswerAnalysis(questionItem.getAnswerAnalysis());
                    itemVo.setCorrectAnswer(questionItem.getCorrectAnswer());
                    itemVo.setMemberCnt(memberAnswerItemCountMap.getOrDefault(questionItem.getId(),0L));
                    answerList.add(itemVo);
                }
            }
            vo.setAnswerList(answerList);
            objects.add( vo);
        }
        return  new FebsResponse().success().data(objects);
    }
    @Override
    public FebsResponse studyInfoList(ApiCompanyStudyInfoDto dto) {
        List<ApiCompanyStudyInfoVo> objects = new ArrayList<>();
        String companyId = LoginUserUtil.getLoginUser().getCompanyId();
        String productQuestionId = dto.getProductQuestionId();
        LambdaQueryWrapper<AiMemberAnswerItem> memberAnswerItemLambdaQueryWrapper = Wrappers.lambdaQuery(AiMemberAnswerItem.class);
        memberAnswerItemLambdaQueryWrapper.eq(AiMemberAnswerItem::getProductQuestionId,productQuestionId);
        memberAnswerItemLambdaQueryWrapper.eq(AiMemberAnswerItem::getCompanyId,companyId);
        List<AiMemberAnswerItem> memberAnswerItemList = aiMemberAnswerItemService.getListByQuery(memberAnswerItemLambdaQueryWrapper);
        if ( CollUtil.isEmpty(memberAnswerItemList)){
            return  new FebsResponse().success().data(objects);
        }
        Set<String> memberIdSet = memberAnswerItemList.stream().map(AiMemberAnswerItem::getMemberId).collect(Collectors.toSet());
        List<MallMember> mallMembers = mallMemberMapper.selectList(
                Wrappers.lambdaQuery(MallMember.class)
                        .select(MallMember::getMemberUuid, MallMember::getName, MallMember::getRealName)
                        .in(MallMember::getMemberUuid, memberIdSet)
                        .eq(MallMember::getCompanyId, companyId)
        );
        //Stream流操作mallMembers,获取一个map<memberUuid,mallMember>的对象
        Map<String, MallMember> mallMemberMap = mallMembers.stream().collect(Collectors.toMap(MallMember::getMemberUuid, mallMember -> mallMember));
        for (AiMemberAnswerItem memberAnswerItem : memberAnswerItemList){
            ApiCompanyStudyInfoVo vo = new ApiCompanyStudyInfoVo();
            vo.setMemberName(mallMemberMap.get(memberAnswerItem.getMemberId()).getName());
            vo.setNickName(mallMemberMap.get(memberAnswerItem.getMemberId()).getRealName());
            vo.setMemberAnswerState(memberAnswerItem.getMemberAnswerState());
            vo.setAnswer( memberAnswerItem.getAnswer());
            objects.add(vo);
        }
        return  new FebsResponse().success().data(objects);
    }
    @Override
    public FebsResponse studyRecordList(ApiCompanyStudyRecordDto dto) {
        String companyId = LoginUserUtil.getLoginUser().getCompanyId();
        dto.setCompanyId( companyId);
        // 创建分页对象,传入当前页和每页大小
        Page<ApiCompanyStudyRecordVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        IPage<ApiCompanyStudyRecordVo> result = aiMemberAnswerService.getStudyRecordList(page,dto);
        return new FebsResponse().success().data(result);
    }
}