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