| | |
| | | import cc.mrbird.febs.ai.entity.*; |
| | | import cc.mrbird.febs.ai.enumerates.AiTypeEnum; |
| | | import cc.mrbird.febs.ai.mapper.AiMemberMapper; |
| | | import cc.mrbird.febs.ai.req.member.ApiMemberTeamPageDto; |
| | | import cc.mrbird.febs.ai.req.member.ApiMemberTeamPracticeDto; |
| | | import cc.mrbird.febs.ai.req.member.ApiMemberTeamStudyDto; |
| | | import cc.mrbird.febs.ai.res.member.ApiMemberTeamPageVo; |
| | | import cc.mrbird.febs.ai.res.member.ApiMemberTeamPracticeVo; |
| | | import cc.mrbird.febs.ai.res.member.ApiMemberTeamStudyVo; |
| | | import cc.mrbird.febs.ai.res.productPoint.ApiProductPointListVo; |
| | | import cc.mrbird.febs.ai.req.member.*; |
| | | import cc.mrbird.febs.ai.res.member.*; |
| | | import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerPreviousItemVo; |
| | | import cc.mrbird.febs.ai.service.*; |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | 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; |
| | |
| | | private final MallMemberMapper mallMemberMapper; |
| | | private final AiMemberTalkService aiMemberTalkService; |
| | | private final AiMemberAnswerService aiMemberAnswerService; |
| | | private final AiMemberAnswerItemService aiMemberAnswerItemService; |
| | | 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); |
| | |
| | | |
| | | //判断mallMemberMap中是否存在该会员 |
| | | apiMemberTeamPageVo.setNickName(mallMemberMap.containsKey(aiMemberId) ? mallMemberMap.get(aiMemberId).getName() : ""); |
| | | apiMemberTeamPageVo.setMemberName(mallMemberMap.containsKey(aiMemberId) ? mallMemberMap.get(aiMemberId).getName() : ""); |
| | | apiMemberTeamPageVo.setMemberName(mallMemberMap.containsKey(aiMemberId) ? mallMemberMap.get(aiMemberId).getRealName() : ""); |
| | | Integer practiceCnt = 0; |
| | | if (memberIdToCntMapTalk.containsKey(aiMemberId)){ |
| | | practiceCnt = memberIdToCntMapTalk.get(aiMemberId); |
| | |
| | | |
| | | String productId = aiProduct.getId(); |
| | | ApiMemberTeamPracticeVo vo = new ApiMemberTeamPracticeVo(); |
| | | vo.setMemberUuid(memberUuid); |
| | | vo.setProductId(aiProduct.getId()); |
| | | vo.setName(aiProduct.getName()); |
| | | vo.setTarget(aiProduct.getTarget()); |
| | | |
| | |
| | | |
| | | return new FebsResponse().success().data(vos); |
| | | } |
| | | |
| | | @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> pages = aiMemberAnswerService.getAnswerPage(page, dto); |
| | | |
| | | return new FebsResponse().success().data(pages); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse answerInfo(ApiMemberAnswerInfoDto dto) { |
| | | List<ApiMemberAnswerInfoVo> vos = new ArrayList<>(); |
| | | |
| | | String answerId = dto.getAnswerId(); |
| | | AiMemberAnswer memberAnswer = aiMemberAnswerService.getById(answerId); |
| | | if (memberAnswer == null){ |
| | | return new FebsResponse().success().data(vos); |
| | | } |
| | | |
| | | List<AiMemberAnswerItem> records = aiMemberAnswerItemService.getBaseMapper().selectList( |
| | | Wrappers.lambdaQuery(AiMemberAnswerItem.class) |
| | | .eq(AiMemberAnswerItem::getAnswerId, memberAnswer.getId()) |
| | | .orderByAsc(AiMemberAnswerItem::getCreatedTime) |
| | | ); |
| | | |
| | | if (CollUtil.isNotEmpty(records)){ |
| | | Set<String> collect = records.stream().map(AiMemberAnswerItem::getProductQuestionId).collect(Collectors.toSet()); |
| | | |
| | | LambdaQueryWrapper<AiProductQuestionItem> questionItemQuery = Wrappers.lambdaQuery(AiProductQuestionItem.class); |
| | | questionItemQuery.in(AiProductQuestionItem::getProductQuestionId,collect); |
| | | List<AiProductQuestionItem> listByQuery = aiProductQuestionItemService.getListByQuery(questionItemQuery); |
| | | |
| | | if (CollUtil.isNotEmpty(listByQuery)){ |
| | | //利用stream流,操作集合listByQuery,返回一个map对象,key为productQuestionId,value为List<AiProductQuestionItem>对象 |
| | | Map<String, List<AiProductQuestionItem>> questionItemMap = |
| | | listByQuery.stream().collect(Collectors.groupingBy(AiProductQuestionItem::getProductQuestionId)); |
| | | |
| | | for (AiMemberAnswerItem record : records){ |
| | | String productQuestionId = record.getProductQuestionId(); |
| | | ApiMemberAnswerInfoVo vo = new ApiMemberAnswerInfoVo(); |
| | | vo.setTitle(record.getTitle()); |
| | | vo.setDifficulty(record.getDifficulty()); |
| | | vo.setMemberAnswerQuestionId(record.getMemberAnswerQuestionId()); |
| | | vo.setAnswerAnalysis(record.getAnswerAnalysis()); |
| | | vo.setProductQuestionId(record.getProductQuestionId()); |
| | | vo.setCreatedTime(record.getUpdatedTime()); |
| | | |
| | | |
| | | List<AiProductQuestionItem> questionItemList = questionItemMap.get(productQuestionId); |
| | | List<ApiMemberAnswerPreviousItemVo> answerList = new ArrayList<>(); |
| | | if (CollUtil.isNotEmpty(questionItemList)){ |
| | | for (AiProductQuestionItem questionItem : questionItemList){ |
| | | ApiMemberAnswerPreviousItemVo itemVo = new ApiMemberAnswerPreviousItemVo(); |
| | | itemVo.setId(questionItem.getId()); |
| | | itemVo.setAnswer(questionItem.getAnswer()); |
| | | itemVo.setAnswerAnalysis(questionItem.getAnswerAnalysis()); |
| | | itemVo.setCorrectAnswer(questionItem.getCorrectAnswer()); |
| | | answerList.add(itemVo); |
| | | } |
| | | } |
| | | vo.setAnswerList(answerList); |
| | | |
| | | vos.add( vo); |
| | | } |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | List<ApiCompanyStudyVo> records = result.getRecords(); |
| | | if (CollUtil.isNotEmpty(records)){ |
| | | //stream流获取re cords集合中的元素productId的set集合 |
| | | Set<String> collect = records.stream().map(ApiCompanyStudyVo::getProductId).collect(Collectors.toSet()); |
| | | List<AiMemberAnswer> list = aiMemberAnswerService.getIdListByCompanyIdAndProductId(companyId, collect); |
| | | if (CollUtil.isNotEmpty(list)){ |
| | | //利用stream流,操作集合list,返回一个map对象,key为productId,value为按照productId分组的集合的大小,默认值为0 |
| | | Map<String, Long> memberAnswerItemCountMap = |
| | | list.stream().collect(Collectors.groupingBy( |
| | | AiMemberAnswer::getProductId, |
| | | Collectors.counting() |
| | | )); |
| | | for ( ApiCompanyStudyVo record : records){ |
| | | record.setPracticeCnt(memberAnswerItemCountMap.getOrDefault(record.getProductId(), 0L).intValue()); |
| | | } |
| | | } |
| | | } |
| | | 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); |
| | | memberAnswerItemLambdaQueryWrapper.isNotNull(AiMemberAnswerItem::getAnswer); |
| | | 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); |
| | | memberAnswerItemLambdaQueryWrapper.isNotNull(AiMemberAnswerItem::getAnswer); |
| | | List<AiMemberAnswerItem> memberAnswerItemList = aiMemberAnswerItemService.getListByQuery(memberAnswerItemLambdaQueryWrapper); |
| | | if ( CollUtil.isEmpty(memberAnswerItemList)){ |
| | | return new FebsResponse().success().data(objects); |
| | | } |
| | | |
| | | LambdaQueryWrapper<AiProductQuestionItem> answerQuery = Wrappers.lambdaQuery(AiProductQuestionItem.class); |
| | | answerQuery.select( AiProductQuestionItem::getId,AiProductQuestionItem::getAnswer); |
| | | answerQuery.eq(AiProductQuestionItem::getProductQuestionId,productQuestionId); |
| | | answerQuery.eq(AiProductQuestionItem::getCompanyId,companyId); |
| | | List<AiProductQuestionItem> answerQueryList = aiProductQuestionItemService.getListByQuery(answerQuery); |
| | | Map<String, AiProductQuestionItem> answerMap = answerQueryList.stream().collect(Collectors.toMap(AiProductQuestionItem::getId, aiProductQuestionItem -> aiProductQuestionItem)); |
| | | |
| | | 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) |
| | | ); |
| | | //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(answerMap.get(memberAnswerItem.getAnswer()).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); |
| | | } |
| | | } |