Commit a159dc36 by 裴大威

Merge branch 'feat-1002478' into 'master'

阶段顺序发送

See merge request rays/pcloud-book!495
parents ed5ff7c7 54f52a71
......@@ -50,7 +50,7 @@ public interface PersonalStageBiz {
PersonalStageUser nextStageAddStageUserAndWakeupDelay(String robotId, String userWxId, String ip, Long personalStageId);
void sendNotKeywordReply(String robotId, String userWxId, String ip, Long personalStageId, Long personalStageUserId, String userSendContent);
void sendNotKeywordReply(String robotId, String userWxId, String ip, Long personalStageId, Long personalStageUserId, String userSendContent, Integer sendMode, Integer notKeywordSendCount);
void sendNotKeywordFusingReply(String robotId, String userWxId, String ip, Long personalStageId,Long personalStageUserId);
......
......@@ -27,6 +27,7 @@ import com.pcloud.book.personalstage.entity.PersonalStageUser;
import com.pcloud.book.personalstage.entity.PersonalStageWakeup;
import com.pcloud.book.personalstage.enums.JumpTypeEnum;
import com.pcloud.book.personalstage.enums.PersonalStageUserStateEnum;
import com.pcloud.book.personalstage.enums.SendModeEnum;
import com.pcloud.book.personalstage.enums.StageReplyRelevEnum;
import com.pcloud.book.personalstage.utils.CacheUtils;
import com.pcloud.common.core.aspect.ParamLog;
......@@ -64,6 +65,8 @@ import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;
import io.swagger.models.auth.In;
@Component("personalStageBiz")
public class PersonalStageBizImpl implements PersonalStageBiz {
......@@ -368,12 +371,12 @@ public class PersonalStageBizImpl implements PersonalStageBiz {
//走正常逻辑非关键词回复并且更新记录
if (PersonalStageUserStateEnum.NORMAL.value.equals(last.getState())
||PersonalStageUserStateEnum.WAKEUP.value.equals(last.getState())){
LOGGER.info("走正常逻辑非关键词回复并且更新记录");
LOGGER.info("走正常逻辑非关键词回复并且更新记录notKeywordSendCount:{}",notKeywordSendCount);
//如果是正常状态或者唤醒状态才回复,并且更新状态为正常状态
last.setNotKeywordSendCount(notKeywordSendCount+1);
last.setState(PersonalStageUserStateEnum.NORMAL.value);
personalStageUserDao.update(last);
sendNotKeywordReply(robotId,userWxId,ip,personalStage.getId(), last.getId(), content);
sendNotKeywordReply(robotId,userWxId,ip,personalStage.getId(), last.getId(), content, personalStage.getSendMode(),notKeywordSendCount);
}
}
}
......@@ -382,10 +385,10 @@ public class PersonalStageBizImpl implements PersonalStageBiz {
if (!iskeyword&&!hasRecord){
//走正常非关键词回复并且新增记录
LOGGER.info("走正常非关键词回复并且新增记录");
sendNotKeywordReply(robotId,userWxId,ip,personalStage.getId(), last.getId(), content);
PcloudRobot pcloudRobot = pcloudRobotDao.getByWxId(robotId);
Long robotClassifyId=pcloudRobot.getRobotType().longValue();
PersonalStage firstStage = personalStageDao.getFirstStage(robotClassifyId);
sendNotKeywordReply(robotId,userWxId,ip,personalStage.getId(), last.getId(), content,firstStage.getSendMode(), 0);
PersonalStageUser personalStageUser=new PersonalStageUser();
personalStageUser.setRobotId(robotId);
personalStageUser.setWxId(userWxId);
......@@ -569,17 +572,33 @@ public class PersonalStageBizImpl implements PersonalStageBiz {
@ParamLog("非关键词回复")
@Override
public void sendNotKeywordReply(String robotId, String userWxId, String ip, Long personalStageId, Long personalStageUserId, String userSendContent) {
public void sendNotKeywordReply(String robotId, String userWxId, String ip, Long personalStageId, Long personalStageUserId,
String userSendContent, Integer sendMode, Integer count) {
if("重置体验".equals(userSendContent)){
return;
}
PersonalStageReply personalStageReply = null;
List<Long> ids = personalStageReplyDao.getIdsByRelevance(StageReplyRelevEnum.STAGE_NOT_KEYWORD.value, personalStageId);
Long replyId = null;
if (ListUtils.isEmpty(ids)){
return;
}
if (SendModeEnum.RADOM.value.equals(sendMode)){
Random random = new Random();
Long replyId=ids.get(random.nextInt(ids.size()));
PersonalStageReply personalStageReply = personalStageReplyDao.getById(replyId);
replyId=ids.get(random.nextInt(ids.size()));
personalStageReply = personalStageReplyDao.getById(replyId);
}else {
if (null != count){
if ((count).intValue() >= ids.size()){
count = ids.size() -1;
}
LOGGER.info(StageReplyRelevEnum.STAGE_NOT_KEYWORD.value +":"+ personalStageId+":"+count);
personalStageReply = personalStageReplyDao.personalStageReply4Order(StageReplyRelevEnum.STAGE_NOT_KEYWORD.value, personalStageId,count);
replyId = personalStageReply.getId();
}else {
throw new BookBizException(BookBizException.ERROR,"查询到用户发送的非关键词数量为0");
}
}
List<PersonalStageReplyItem> items = personalStageReplyItemDao.getListByReplyIds(Arrays.asList(replyId));
if (ListUtils.isEmpty(items)){
return;
......
......@@ -16,4 +16,6 @@ public interface PersonalStageReplyDao extends BaseDao<PersonalStageReply> {
List<PersonalStageReply> getListByPersonalStageId(Long personalStageId);
List<Long> getIdsByRelevance(Integer relevanceType, Long relevanceId);
PersonalStageReply personalStageReply4Order(Integer value, Long personalStageId, Integer count);
}
\ No newline at end of file
......@@ -39,4 +39,13 @@ public class PersonalStageReplyDaoImpl extends BaseDaoImpl<PersonalStageReply> i
map.put("relevanceId", relevanceId);
return super.getSessionTemplate().selectList(getStatement("getIdsByRelevance"), map);
}
@Override
public PersonalStageReply personalStageReply4Order(Integer relevanceType, Long personalStageId, Integer count) {
Map<String, Object> map = new HashMap<>();
map.put("relevanceType", relevanceType);
map.put("relevanceId", personalStageId);
map.put("count", count);
return super.getSessionTemplate().selectOne(getStatement("personalStageReply4Order"), map);
}
}
......@@ -42,4 +42,7 @@ public class PersonalStage extends BaseEntity {
@ApiModelProperty("唤醒设置集合")
private List<PersonalStageWakeup> personalStageWakeups;
@ApiModelProperty("回复方式 1 随机,2顺序")
private Integer sendMode;
}
\ No newline at end of file
package com.pcloud.book.personalstage.enums;
public enum SendModeEnum {
/**
* 随机发送
*/
RADOM(1),
/**
* 顺序发送
*/
ORDER(2);
public final Integer value;
SendModeEnum(Integer value) {
this.value = value;
}
}
......@@ -12,10 +12,11 @@
<result property="seqNum" column="seq_num" jdbcType="INTEGER"/>
<result property="showProgress" column="show_progress" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="sendMode" column="send_mode" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id, name, not_keyword_fusing_count, not_keyword_fusing_time, robot_classify_id, paper_id, seq_num, show_progress, create_time
id, name, not_keyword_fusing_count, not_keyword_fusing_time, robot_classify_id, paper_id, seq_num, show_progress, create_time,send_mode
</sql>
<select id="getById" resultMap="BaseResultMap" parameterType="java.lang.Long">
......@@ -40,7 +41,8 @@
paper_id,
seq_num,
show_progress,
create_time
create_time,
send_mode
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{name,jdbcType=VARCHAR},
......@@ -50,7 +52,8 @@
#{paperId},
#{seqNum,jdbcType=INTEGER},
#{showProgress,jdbcType=INTEGER},
NOW()
NOW(),
#{sendMode}
</trim>
</insert>
......@@ -76,6 +79,9 @@
<if test="showProgress != null">
show_progress = #{showProgress,jdbcType=INTEGER},
</if>
<if test="sendMode != null">
send_mode = #{sendMode,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
......
......@@ -98,4 +98,14 @@
where relevance_id=#{relevanceId}
and relevance_type=#{relevanceType}
</select>
<select id="personalStageReply4Order" parameterType="map" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from personal_stage_reply
where relevance_id=#{relevanceId}
and relevance_type=#{relevanceType}
order by create_time asc
limit #{count},1
</select>
</mapper>
\ No newline at end of file
......@@ -117,7 +117,7 @@
<if test="personalStageId!=null">
and personal_stage_id=#{personalStageId}
</if>
order by create_time desc
order by id desc
LIMIT 0,1
</select>
......
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