Commit efe7a77f by 裴大威

Merge branch 'feat-1002473' into 'master'

不用双删才能体验流程,触发关键词体验

See merge request rays/pcloud-book!489
parents a7eb2ddb be5339a4
package com.pcloud.book.mq.delay;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.pcloud.book.personalstage.biz.PersonalStageBiz;
import com.pcloud.book.personalstage.biz.PersonalStageJumpBiz;
import com.pcloud.book.personalstage.constant.PersonalStageConstant;
import com.pcloud.book.personalstage.dto.WakeupDelayDTO;
import com.pcloud.common.core.mq.DelayQueueDTO;
import com.pcloud.common.core.mq.MQQueueConstants;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -37,8 +42,15 @@ public class DelayReceiver {
log.info("收到延时消息为空!");
return;
}
String s = JSONObject.toJSONString(dto.getMsg());
WakeupDelayDTO wakeupDelayDTO = JSONObject.parseObject(s, WakeupDelayDTO.class);
String dateStr = JedisClusterUtils.get(PersonalStageConstant.PERSONAL_STAGE_SEND_TIME + wakeupDelayDTO.getWxId());
if (PersonalStageConstant.PERSONALSTAGE_DELAY_WAKEUP.equals(dto.getType())){
if(wakeupDelayDTO.getPersonalStageCreateTime()!=null&&
DateUtils.getDateFromString(wakeupDelayDTO.getPersonalStageCreateTime(),"yyyy-MM-dd HH:mm:ss")
.after(DateUtils.getDateFromString(dateStr,"yyyy-MM-dd HH:mm:ss"))) {
personalStageBiz.dealDelayWakeup(dto);
}
} else if (PersonalStageConstant.PERSONALSTAGE_DELAY_FUSING.equals(dto.getType())) {
personalStageBiz.dealDelayFusingFinish(dto);
} else if (PersonalStageConstant.PERSONALSTAGE_DELAY_LINKUP.equals(dto.getType())) {
......
package com.pcloud.book.mq.topic;
import com.pcloud.book.keywords.biz.BookGuideBiz;
import com.pcloud.book.mq.config.MQTopicConumer;
import com.pcloud.book.personalstage.biz.PersonalStageJumpBiz;
import com.pcloud.book.personalstage.constant.PersonalStageConstant;
import com.pcloud.book.personalstage.enums.JumpTypeEnum;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.base.constants.WechatGroupConstant;
import com.pcloud.wechatgroup.message.dto.AgreeAddUserDTO;
import com.pcloud.wechatgroup.message.dto.SendTextDTO;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
......@@ -16,6 +21,8 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
@Slf4j
@Component("selfRobotSendTextListener")
......@@ -25,6 +32,8 @@ public class SelfRobotSendTextListener {
@Autowired
private PersonalStageJumpBiz personalStageJumpBiz;
@Autowired
private BookGuideBiz bookGuideBiz;
/**
* 接收个人号发送文本消息
......
......@@ -7,19 +7,23 @@ import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO;
import com.pcloud.book.guide.dto.PcloudGuideDelayDto;
import com.pcloud.book.guide.dto.WakeUpInfoDto;
import com.pcloud.book.guide.mapper.PcloudRobotSilenceMapper;
import com.pcloud.book.keywords.biz.BookGuideBiz;
import com.pcloud.book.keywords.biz.BookKeywordBiz;
import com.pcloud.book.mq.config.MQTopicConumer;
import com.pcloud.book.pcloudkeyword.dao.PcloudRobotDao;
import com.pcloud.book.pcloudkeyword.entity.PcloudRobot;
import com.pcloud.book.personalstage.constant.PersonalStageConstant;
import com.pcloud.book.reading.biz.ReadingActivityBiz;
import com.pcloud.book.riddle.biz.RiddleRecordBiz;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.book.weixinclock.biz.WeixinClockBiz;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.message.dto.AgreeAddUserDTO;
import com.pcloud.wechatgroup.message.dto.SendTextDTO;
import com.sdk.wxgroup.SendMessageTypeEnum;
import lombok.extern.slf4j.Slf4j;
......@@ -59,6 +63,9 @@ public class WxGroupSendTextListener {
@Autowired
private ReadingActivityBiz readingActivityBiz;
@Autowired
private BookGuideBiz bookGuideBiz;
/**
* 接收微信用户进群消息
*/
......@@ -69,6 +76,31 @@ public class WxGroupSendTextListener {
if (sendTextDTO == null || sendTextDTO.getWechatGroupId() == null || sendTextDTO.getTextContent() == null)
return;
String wechatUserId = sendTextDTO.getWechatUserId();
// TODO
//入口,监听内容如果是重置,记录当前时间存入缓存,并调用统一加好友发送欢迎语接口
/*这里这要过滤掉阶段消息吗?因为延迟队列里面已经有了上次加好友的一些待发送的阶段消息,
在掉一遍这个接口又会产生新的阶段消息,所以要过滤掉之前的阶段消息,需要在队列的消息里面加上一个创建时间
根据缓存的这个时间去过滤,如果队列的这个人的阶段消息的创建时间在缓存的时间之前,则不发送
,如果之后或者相等则发送
*/
if("重置体验".equals(sendTextDTO.getTextContent())){
Date date=new Date();
String dateStr = DateUtils.formatDate(date, "yyyy-MM-dd HH:mm:ss");
//把这个时间存入缓存
String key= PersonalStageConstant.PERSONAL_STAGE_SEND_TIME+sendTextDTO.getWxId();
JedisClusterUtils.set(key,dateStr);
AgreeAddUserDTO agreeAddUserDTO=new AgreeAddUserDTO();
agreeAddUserDTO.setIp(sendTextDTO.getIp());
//agreeAddUserDTO.setNickName(sendTextDTO.get);
agreeAddUserDTO.setRobotWxId( sendTextDTO.getWxId());
agreeAddUserDTO.setUserWxId(sendTextDTO.getWechatGroupId());
agreeAddUserDTO.setFirst(false);
bookGuideBiz.sendGuide(agreeAddUserDTO);
}
// 更新群人数和群名称
changeGroupInfo(sendTextDTO);
// 缄默设置处理
......
......@@ -473,6 +473,7 @@ public class PersonalStageBizImpl implements PersonalStageBiz {
wakeupDelayDTONew.setIp(ip);
wakeupDelayDTONew.setPersonalStageId(personalStageId);
wakeupDelayDTONew.setPersonalStageUserId(wakeupDelayDTO.getPersonalStageUserId());
wakeupDelayDTO.setPersonalStageCreateTime(DateUtils.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss"));
DelayQueueDTO delayQueueDTONew = DelayQueueDTO.builder().key(userWxId).type(PersonalStageConstant.PERSONALSTAGE_DELAY_WAKEUP).msg(wakeupDelayDTONew).timeout(time).build();
delayMessageSender.send(delayQueueDTONew);
LOGGER.info("下一个延时发送delayQueueDTONew="+delayQueueDTONew.toString());
......@@ -515,6 +516,7 @@ public class PersonalStageBizImpl implements PersonalStageBiz {
wakeupDelayDTO.setIp(ip);
wakeupDelayDTO.setPersonalStageId(personalStageId);
wakeupDelayDTO.setPersonalStageUserId(personalStageUser.getId());
wakeupDelayDTO.setPersonalStageCreateTime(DateUtils.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss"));
DelayQueueDTO delayQueueDTO = DelayQueueDTO.builder().key(userWxId).type(PersonalStageConstant.PERSONALSTAGE_DELAY_WAKEUP).msg(wakeupDelayDTO).timeout(toStageStartTime*1000).build();
delayMessageSender.send(delayQueueDTO);
return personalStageUser;
......@@ -523,6 +525,9 @@ public class PersonalStageBizImpl implements PersonalStageBiz {
@ParamLog("非关键词回复")
@Override
public void sendNotKeywordReply(String robotId, String userWxId, String ip, Long personalStageId, Long personalStageUserId, String userSendContent) {
if("重置体验".equals(userSendContent)){
return;
}
List<Long> ids = personalStageReplyDao.getIdsByRelevance(StageReplyRelevEnum.STAGE_NOT_KEYWORD.value, personalStageId);
if (ListUtils.isEmpty(ids)){
return;
......
......@@ -15,4 +15,8 @@ public class PersonalStageConstant {
// 项目进度页面路由
public static final String PERSONAL_STAGE_PROJECT_PROGRESS = "/personalCenter/projectProgress";
public static final String PERSONAL_STAGE_SEND_TIME = "PERSONAL_STAGE_SEND_TIME";
}
......@@ -22,4 +22,7 @@ public class WakeupDelayDTO implements Serializable {
private String ip;
@ApiModelProperty("用户阶段记录id")
private Long personalStageUserId;
@ApiModelProperty("用户阶段创建时间")
private String personalStageCreateTime;
}
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