Commit a5f2fd17 by 裴大威

Merge branch 'feat-zyj-1002789' into 'master'

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

See merge request rays/pcloud-book!655
parents b31f40df bed02167
...@@ -346,4 +346,6 @@ public interface BookDao extends BaseDao<Book> { ...@@ -346,4 +346,6 @@ public interface BookDao extends BaseDao<Book> {
List<ESBookAndAdviser> findBookAndAdviserByBookIds(List<Long> bookIds); List<ESBookAndAdviser> findBookAndAdviserByBookIds(List<Long> bookIds);
Map<Long,BookDto> getMapByBookIds(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 { ...@@ -371,4 +371,11 @@ public class BookDaoImpl extends BaseDaoImpl<Book> implements BookDao {
return super.getSqlSession().selectMap(super.getStatement("getMapByBookIds"), bookIds, "bookId"); 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 { ...@@ -120,4 +120,12 @@ public interface PersonalStageJumpBiz {
* @param userWxId * @param userWxId
*/ */
public void deletePaperRecord(String robotId, String 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 { ...@@ -543,7 +543,16 @@ public class PersonalStageBizImpl implements PersonalStageBiz {
} }
PersonalStageJumpKeywordDto noAdviserBookDto=personalStageJumpKeywordDao.getByKeyword(personalStageId,content, JumpTypeEnum.NO_ADVISER_BOOK.key); PersonalStageJumpKeywordDto noAdviserBookDto=personalStageJumpKeywordDao.getByKeyword(personalStageId,content, JumpTypeEnum.NO_ADVISER_BOOK.key);
if (noAdviserBookDto!=null){ 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; return true;
} }
} }
......
package com.pcloud.book.personalstage.biz.impl; 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.Lists;
import com.google.common.collect.Maps; 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.content.ResourceConsr;
import com.pcloud.book.consumer.feedback.FeedbackConsr; import com.pcloud.book.consumer.feedback.FeedbackConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr; import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.custom.biz.CustomPlanBiz; import com.pcloud.book.custom.biz.CustomPlanBiz;
import com.pcloud.book.custom.mapper.CustomPlanModuleSuggestionMapper; 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.group.biz.WeixinQrcodeBiz;
import com.pcloud.book.guide.biz.PcloudGuideBiz; import com.pcloud.book.guide.biz.PcloudGuideBiz;
import com.pcloud.book.keywords.enums.ReplyTypeEnum; import com.pcloud.book.keywords.enums.ReplyTypeEnum;
...@@ -22,9 +22,34 @@ import com.pcloud.book.personalstage.biz.PersonalStageBiz; ...@@ -22,9 +22,34 @@ import com.pcloud.book.personalstage.biz.PersonalStageBiz;
import com.pcloud.book.personalstage.biz.PersonalStageJumpBiz; import com.pcloud.book.personalstage.biz.PersonalStageJumpBiz;
import com.pcloud.book.personalstage.check.PersonalStageCheck; import com.pcloud.book.personalstage.check.PersonalStageCheck;
import com.pcloud.book.personalstage.constant.PersonalStageConstant; import com.pcloud.book.personalstage.constant.PersonalStageConstant;
import com.pcloud.book.personalstage.dao.*; import com.pcloud.book.personalstage.dao.PersonalStageDao;
import com.pcloud.book.personalstage.dto.*; import com.pcloud.book.personalstage.dao.PersonalStageJumpDao;
import com.pcloud.book.personalstage.entity.*; 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.JumpTypeEnum;
import com.pcloud.book.personalstage.enums.PersonalStageUserStateEnum; import com.pcloud.book.personalstage.enums.PersonalStageUserStateEnum;
import com.pcloud.book.personalstage.vo.request.BaseStageJumpRequestVO; import com.pcloud.book.personalstage.vo.request.BaseStageJumpRequestVO;
...@@ -51,10 +76,14 @@ import com.pcloud.contentcenter.resource.dto.ResourceDTO; ...@@ -51,10 +76,14 @@ import com.pcloud.contentcenter.resource.dto.ResourceDTO;
import com.pcloud.feedback.paper.dto.PaperAndQuestionDto; import com.pcloud.feedback.paper.dto.PaperAndQuestionDto;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO; import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO; 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.BusinessConstant;
import com.sdk.wxgroup.im.mimc.dto.SendMomentsDTO; import com.sdk.wxgroup.im.mimc.dto.SendMomentsDTO;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -63,9 +92,19 @@ import org.springframework.stereotype.Component; ...@@ -63,9 +92,19 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; 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 java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
@Component("personalStageJumpBiz") @Component("personalStageJumpBiz")
@Slf4j @Slf4j
public class PersonalStageJumpBizImpl implements PersonalStageJumpBiz { public class PersonalStageJumpBizImpl implements PersonalStageJumpBiz {
...@@ -121,7 +160,8 @@ public class PersonalStageJumpBizImpl implements PersonalStageJumpBiz { ...@@ -121,7 +160,8 @@ public class PersonalStageJumpBizImpl implements PersonalStageJumpBiz {
private CustomPlanModuleSuggestionMapper customPlanModuleSuggestionMapper; private CustomPlanModuleSuggestionMapper customPlanModuleSuggestionMapper;
@Autowired @Autowired
private UserReplaceCodeDao userReplaceCodeDao; private UserReplaceCodeDao userReplaceCodeDao;
@Value("${wechat.group.link.prefix}")
private String wechatGroupLinkPrefix;
@Value("${wechat.group.link.prefix}") @Value("${wechat.group.link.prefix}")
...@@ -1370,4 +1410,65 @@ public class PersonalStageJumpBizImpl implements PersonalStageJumpBiz { ...@@ -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 { ...@@ -12,7 +12,11 @@ public enum JumpTypeEnum {
ZERO_BOOK(8,"0级书跳转"), ZERO_BOOK(8,"0级书跳转"),
NO_ZERO_BOOK(9,"非0级书跳转"), NO_ZERO_BOOK(9,"非0级书跳转"),
ADVISER_BOOK(10,"无等级且已收录图书跳转"), ADVISER_BOOK(10,"无等级且已收录图书跳转"),
NO_ADVISER_BOOK(11,"无等级且未收录图书跳转"); NO_ADVISER_BOOK(11,"无等级且未收录图书跳转"),
/**
* 无等级,无编辑收录,系统中有书
*/
NO_ADVISER_BOOK_BOOK_EXIST(12,"无等级且未收录编辑图书跳转");
public final Integer key; public final Integer key;
public final String desc; public final String desc;
......
...@@ -2323,4 +2323,17 @@ ...@@ -2323,4 +2323,17 @@
${item} ${item}
</foreach> </foreach>
</select> </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> </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