Commit bed02167 by 朱亚洁

1002789小睿个人号搜索书刊优化

parent b31f40df
......@@ -346,4 +346,6 @@ public interface BookDao extends BaseDao<Book> {
List<ESBookAndAdviser> findBookAndAdviserByBookIds(List<Long> bookIds);
Map<Long,BookDto> getMapByBookIds(List<Long> bookIds);
BookDto getBookByName(String bookName);
}
......@@ -371,4 +371,11 @@ public class BookDaoImpl extends BaseDaoImpl<Book> implements BookDao {
return super.getSqlSession().selectMap(super.getStatement("getMapByBookIds"), bookIds, "bookId");
}
@Override
public BookDto getBookByName(String bookName) {
Map<String, Object> paramMap = Maps.newHashMap();
paramMap.put("bookName", bookName);
return super.getSqlSession().selectOne(getStatement("getBookByName"),paramMap);
}
}
......@@ -120,4 +120,12 @@ public interface PersonalStageJumpBiz {
* @param userWxId
*/
public void deletePaperRecord(String robotId, String userWxId);
/**
* 无等级未收录图书,但book中有,处理阶段跳转
* @param userWxId
* @param robotId
* @param jumpTypeEnum
*/
Boolean handleBookExistJump(String userWxId, String robotId, String content, JumpTypeEnum jumpTypeEnum, String lastBookName);
}
......@@ -543,7 +543,16 @@ public class PersonalStageBizImpl implements PersonalStageBiz {
}
PersonalStageJumpKeywordDto noAdviserBookDto=personalStageJumpKeywordDao.getByKeyword(personalStageId,content, JumpTypeEnum.NO_ADVISER_BOOK.key);
if (noAdviserBookDto!=null){
personalStageJumpBiz.handlePersonalStageJump(userWxId,robotId,content,JumpTypeEnum.NO_ADVISER_BOOK,null,null);
//无等级未收录图书,但book中有
BookDto bookDto = bookDao.getBookByName(lastBookName);
if (null!=bookDto){
//目前跟无收录图书跳转一致,平台端未配置该跳转类型
personalStageJumpBiz.handleBookExistJump(userWxId,robotId,content,JumpTypeEnum.NO_ADVISER_BOOK, lastBookName);
}else {
personalStageJumpBiz.handlePersonalStageJump(userWxId,robotId,content,JumpTypeEnum.NO_ADVISER_BOOK,null,null);
}
return true;
}
}
......
package com.pcloud.book.personalstage.biz.impl;
import com.alibaba.fastjson.JSON;
import com.pcloud.book.base.exception.BookBizException;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.alibaba.fastjson.JSON;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.content.ResourceConsr;
import com.pcloud.book.consumer.feedback.FeedbackConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.custom.biz.CustomPlanBiz;
import com.pcloud.book.custom.mapper.CustomPlanModuleSuggestionMapper;
import com.pcloud.book.custom.vo.UserBookServiceVO;
import com.pcloud.book.group.biz.WeixinQrcodeBiz;
import com.pcloud.book.guide.biz.PcloudGuideBiz;
import com.pcloud.book.keywords.enums.ReplyTypeEnum;
......@@ -22,9 +22,34 @@ import com.pcloud.book.personalstage.biz.PersonalStageBiz;
import com.pcloud.book.personalstage.biz.PersonalStageJumpBiz;
import com.pcloud.book.personalstage.check.PersonalStageCheck;
import com.pcloud.book.personalstage.constant.PersonalStageConstant;
import com.pcloud.book.personalstage.dao.*;
import com.pcloud.book.personalstage.dto.*;
import com.pcloud.book.personalstage.entity.*;
import com.pcloud.book.personalstage.dao.PersonalStageDao;
import com.pcloud.book.personalstage.dao.PersonalStageJumpDao;
import com.pcloud.book.personalstage.dao.PersonalStageJumpEmailDao;
import com.pcloud.book.personalstage.dao.PersonalStageJumpKeywordDao;
import com.pcloud.book.personalstage.dao.PersonalStageJumpLinkupDao;
import com.pcloud.book.personalstage.dao.PersonalStageProgressMessageDao;
import com.pcloud.book.personalstage.dao.PersonalStageReplyDao;
import com.pcloud.book.personalstage.dao.PersonalStageUserDao;
import com.pcloud.book.personalstage.dao.UserReplaceCodeDao;
import com.pcloud.book.personalstage.dto.BaseDelayDTO;
import com.pcloud.book.personalstage.dto.EndServiceJumpNextDTO;
import com.pcloud.book.personalstage.dto.LinkClickRecordDTO;
import com.pcloud.book.personalstage.dto.LinkupDelayDTO;
import com.pcloud.book.personalstage.dto.PaperDelayDTO;
import com.pcloud.book.personalstage.dto.PersonalStageJumpDto;
import com.pcloud.book.personalstage.dto.PersonalStageJumpKeywordDto;
import com.pcloud.book.personalstage.dto.PlanJumpNextDTO;
import com.pcloud.book.personalstage.dto.ProgressDelayDTO;
import com.pcloud.book.personalstage.dto.TimeJumpDelayDTO;
import com.pcloud.book.personalstage.dto.TimeJumpNextDTO;
import com.pcloud.book.personalstage.entity.PersonalStage;
import com.pcloud.book.personalstage.entity.PersonalStageJump;
import com.pcloud.book.personalstage.entity.PersonalStageJumpEmail;
import com.pcloud.book.personalstage.entity.PersonalStageJumpKeyword;
import com.pcloud.book.personalstage.entity.PersonalStageJumpLinkup;
import com.pcloud.book.personalstage.entity.PersonalStageProgressMessage;
import com.pcloud.book.personalstage.entity.PersonalStageUser;
import com.pcloud.book.personalstage.entity.UserReplaceCode;
import com.pcloud.book.personalstage.enums.JumpTypeEnum;
import com.pcloud.book.personalstage.enums.PersonalStageUserStateEnum;
import com.pcloud.book.personalstage.vo.request.BaseStageJumpRequestVO;
......@@ -51,10 +76,14 @@ import com.pcloud.contentcenter.resource.dto.ResourceDTO;
import com.pcloud.feedback.paper.dto.PaperAndQuestionDto;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO;
import com.sdk.wxgroup.*;
import com.sdk.wxgroup.BaseVO;
import com.sdk.wxgroup.RobotProcessTypeEnum;
import com.sdk.wxgroup.SendMessageTypeEnum;
import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.im.mimc.BusinessConstant;
import com.sdk.wxgroup.im.mimc.dto.SendMomentsDTO;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -63,9 +92,19 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
@Component("personalStageJumpBiz")
@Slf4j
public class PersonalStageJumpBizImpl implements PersonalStageJumpBiz {
......@@ -121,7 +160,8 @@ public class PersonalStageJumpBizImpl implements PersonalStageJumpBiz {
private CustomPlanModuleSuggestionMapper customPlanModuleSuggestionMapper;
@Autowired
private UserReplaceCodeDao userReplaceCodeDao;
@Value("${wechat.group.link.prefix}")
private String wechatGroupLinkPrefix;
@Value("${wechat.group.link.prefix}")
......@@ -1370,4 +1410,65 @@ public class PersonalStageJumpBizImpl implements PersonalStageJumpBiz {
}
}
@Override
@ParamLog("无等级未收录图书,但book中有,处理阶段跳转")
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public Boolean handleBookExistJump(String userWxId, String robotWxId, String content, JumpTypeEnum jumpTypeEnum, String lastBookName) {
// 查询用户的当前状态信息
PersonalStageUser currentStageUser = personalStageUserDao.getLast(userWxId, robotWxId, null);
// 如果用户没有阶段状态,则不处理
if(currentStageUser == null || currentStageUser.getId() <= 0) {
return false;
}
// 查询命中关键字跳转下一阶段的id
PersonalStageJumpKeywordDto jumpKeywordDto = personalStageJumpKeywordDao.getByKeyword(currentStageUser.getPersonalStageId(), content, jumpTypeEnum.key);
if(null == jumpKeywordDto || StringUtil.isEmpty(jumpKeywordDto.getKeyword())){
// 未能命中关键词
return false;
}
// 如果下一个阶段是空,则已完成
if(null == jumpKeywordDto.getAfterPersonalStageId() || jumpKeywordDto.getAfterPersonalStageId() <=0){
return true;
}
GroupRobotDTO groupRobotDTO = wechatGroupConsr.getGroupRobotByWxId(robotWxId);
String ip = weixinQrcodeBiz.getRobotIpByGeneration(groupRobotDTO.getVersion());
//处理需求单记录
dealPaperRecord(currentStageUser.getPersonalStageId(),jumpKeywordDto.getAfterPersonalStageId(), userWxId, robotWxId);
// 发送邮件
sendEmail(userWxId, robotWxId, content, jumpKeywordDto);
// 将用户置为下个阶段
PersonalStageUser nextPersonalStageUser = personalStageBiz.nextStageAddStageUserAndWakeupDelay(robotWxId, userWxId, ip, jumpKeywordDto.getAfterPersonalStageId());
// 发送内容衔接语
Boolean revertSuccess = true;
try {
lastBookName = URLEncoder.encode(lastBookName, "utf-8");
} catch (UnsupportedEncodingException e) {
log.error("书名编码失败:{}; {}", lastBookName, e.getMessage());
revertSuccess = false;
}
String h5link = wechatGroupLinkPrefix + "/dialog/search?wxId=" + userWxId + "&robotWxId=" + robotWxId;
if (revertSuccess) {//编码成功,拼参数
h5link = h5link + "&bookName=" + lastBookName;
}
String linkUrl = UrlUtils.getShortUrl4Own(h5link);
String jumpLinkup="小睿已经找到本书了,不过非常遗憾呢,小睿还在努力学习这本书,主人可以尝试搜索其他感兴趣的书名哦。你可以点击网址:"+linkUrl+"查看本书相关信息";
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(jumpLinkup);
sendTextMessageVO.setAltId(robotWxId);
sendTextMessageVO.setWxGroupId(userWxId);
sendTextMessageVO.setIp(ip);
sendTextMessageVO.setCode(SendMessageTypeEnum.SELF.getCode());
sendTextMessageVO.setRobotProcessType(RobotProcessTypeEnum.PERSONAL_STAGE_JUMP);
sendTextMessageVO.setMessageGroupId(UUID.randomUUID().toString());
sendTextMessageVO.setIndex(0);
sendTextMessageVO.setCounts(1);
wechatGroupConsr.sendMessage(JSON.toJSONString(sendTextMessageVO));
// 停止发送引导语
pcloudGuideBiz.stopPcloudGuidePush(robotWxId, userWxId);
//存用户跳转之前的最后一次非关键词回复到表
personalStageBiz.addUserReplaceCodeBeforeJump(currentStageUser.getPersonalStageId(),userWxId,robotWxId);
return true;
}
}
......@@ -12,7 +12,11 @@ public enum JumpTypeEnum {
ZERO_BOOK(8,"0级书跳转"),
NO_ZERO_BOOK(9,"非0级书跳转"),
ADVISER_BOOK(10,"无等级且已收录图书跳转"),
NO_ADVISER_BOOK(11,"无等级且未收录图书跳转");
NO_ADVISER_BOOK(11,"无等级且未收录图书跳转"),
/**
* 无等级,无编辑收录,系统中有书
*/
NO_ADVISER_BOOK_BOOK_EXIST(12,"无等级且未收录编辑图书跳转");
public final Integer key;
public final String desc;
......
......@@ -2323,4 +2323,17 @@
${item}
</foreach>
</select>
<select id="getBookByName" resultMap="bookMap" parameterType="map">
SELECT
ISBN, TYPE_CODE, BOOK_NAME, AUTHOR,
PUBLISH, PUBLISH_DATE, COVER_IMG,AD_IMG,REMARK,ORIGIN_NAME,BOOK_PRICE,ISSN,SERIAL_NUMBER,VERSION,
SPONSOR, ORGANIZER, CN, RELEASE_CYCLE, BOOK_NUM, PROGRAMA, MAIL_CODE, ADDRESS, TELEPHONE, MAIL, PURPOSE
FROM
BOOK
WHERE
BOOK_NAME = #{bookName}
AND IS_DELETE = 0
LIMIT 1
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment