Commit 4be01c9b by zhangdongwei-intern Committed by 裴大威

feat-1002402: 个人号分类加排序 feat 102399 feat 2364

parent 9de2455e
......@@ -19,4 +19,10 @@ public class RobotClassifyDTO {
@ApiModelProperty("小号编号")
private String uniqueNumber;
@ApiModelProperty("小号状态(1:上线 2:离线)")
private Integer state;
@ApiModelProperty("小号真是状态(1:上线 2:离线)")
private Integer realStatus;
}
......@@ -248,4 +248,17 @@ public class BookApplication {
public Binding wxGroupSendNotTextBind() {
return RabbitMQFactory.bindingExchange(wxGroupSendNotTextQueue(), MQTopicProducer.WXGROUP_SEND_NOT_TEXT);
}
/**
* 监听小号真实状态
*/
@Bean
public Queue wxGroupRealStatusQueue() {
return RabbitMQFactory.queueBuilder(MQTopicConumer.ROBOT_REAL_STATUS);
}
@Bean
public Binding wxGroupRealStatusBind() {
return RabbitMQFactory.bindingExchange(wxGroupRealStatusQueue(), MQTopicProducer.ROBOT_REAL_STATUS);
}
}
......@@ -16,6 +16,11 @@ public class BookBusinessConstants {
public static final Map<String, AutoUpdateGroupNumDTO> GROUP_NUM_DTO_MAP = new ConcurrentHashMap<>(128);
/**
* 小号上次心跳时间缓存
*/
public static final String ACTIVE_ROBOT_CACHE_KEY_PREFIX = "activerobot:";
/**
* 收款状态
*/
public enum CollectionStatus {
......
......@@ -11,6 +11,11 @@ public class MQTopicConumer {
private static final String PREFIX = "consumer.book.";
/**
* 小号状态
*/
public static final String ROBOT_REAL_STATUS = PREFIX + MQTopicProducer.ROBOT_REAL_STATUS;
/**
* 清除录音消费者
*/
public static final String DELETE_VIDEO = PREFIX + MQTopicProducer.DELETE_VIDEO;
......
package com.pcloud.book.mq.topic;
import com.pcloud.book.group.biz.GroupQrcodeBiz;
import com.pcloud.book.mq.config.MQTopicConumer;
import com.pcloud.book.pcloudkeyword.biz.PcloudRobotBiz;
import com.pcloud.book.reading.biz.ReadingActivityBiz;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.wechatgroup.message.dto.AddWXGroupDTO;
import com.pcloud.wechatgroup.selfrobot.dto.RobotStatusDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Component
@RabbitListener(queues = MQTopicConumer.ROBOT_REAL_STATUS)
public class RobotRealStatusListener {
@Resource
private PcloudRobotBiz pcloudRobotBiz;
/**
* 处理小号真实状态
*/
@ParamLog(value = "处理小号真实状态", isAfterReturn = false)
@RabbitHandler
public void onMessage(RobotStatusDTO dto) throws BizException {
try {
pcloudRobotBiz.changeRobotRealStatus(dto.getWxId(), dto.getStatus());
} catch (Exception e) {
log.error("接收微信用户进群消息失败" + e.getMessage(), e);
}
}
}
......@@ -14,6 +14,11 @@ import java.util.Map;
public interface PcloudRobotBiz {
/**
* 校验小号真是状态
*/
void changeRobotRealStatus(String wxId, Integer status);
void createPcloudRobot(PcloudRobot pcloudRobot);
void updatePcloudRobot(PcloudRobot pcloudRobot);
......
......@@ -3,6 +3,7 @@ package com.pcloud.book.pcloudkeyword.biz.impl;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.content.ResourceConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.constant.BookBusinessConstants;
import com.pcloud.book.guide.biz.PcloudGuideBiz;
import com.pcloud.book.guide.biz.PcloudRobotWakeUpBiz;
import com.pcloud.book.guide.mapper.PcloudRobotSilenceMapper;
......@@ -31,6 +32,7 @@ import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.BeanUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.QrcodeUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.httpclient.UrlUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.contentcenter.resource.dto.ResourceDTO;
......@@ -53,6 +55,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Component("pcloudRobotBiz")
......@@ -96,6 +99,38 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
@Autowired
private WechatGroupConsr wechatGroupConsr;
@ParamLog(value = "[changeRobotRealStatus]", isAfterReturn = false)
@Override
@Transactional(rollbackFor = {Exception.class})
public void changeRobotRealStatus(String wxId, Integer status) {
PcloudRobot robot = pcloudRobotDao.getByWxId(wxId);
if (Objects.isNull(robot)) {
return;
}
if (!status.equals(robot.getRealStatus())) {
pcloudRobotDao.updateRealStatus(wxId, status);
}
// 如果小号上线则缓存7s,心跳频率5s
if (1 == status) {
JedisClusterUtils.hset(BookBusinessConstants.ACTIVE_ROBOT_CACHE_KEY_PREFIX, wxId, String.valueOf(System.currentTimeMillis() + 7 * 1000));
}
// 处理无响应的上线状态小号,更新为下线
List<RobotClassifyDTO> allPcloudRobot = pcloudRobotDao.getAllPcloudRobot();
List<String> ids = allPcloudRobot.stream().filter(x -> 1 == x.getRealStatus()).map(RobotClassifyDTO::getWxId).collect(Collectors.toList());
Map<String, String> map = JedisClusterUtils.hgetAll(BookBusinessConstants.ACTIVE_ROBOT_CACHE_KEY_PREFIX);
for (String id : ids) {
String s = map.get(id);
if (null == s) {
JedisClusterUtils.hset(BookBusinessConstants.ACTIVE_ROBOT_CACHE_KEY_PREFIX, id, String.valueOf(System.currentTimeMillis() + 7 * 1000));
continue;
}
// 如果超时没有收到心跳则下线
if (System.currentTimeMillis() > Long.parseLong(s)) {
pcloudRobotDao.updateRealStatus(id, 2);
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void createPcloudRobot(PcloudRobot pcloudRobot) {
......
......@@ -9,6 +9,11 @@ import java.util.Map;
public interface PcloudRobotDao extends BaseDao<PcloudRobot> {
/**
* c++心跳程序自动修改真实状态
*/
void updateRealStatus(String wxId, Integer realStatus);
PcloudRobot getByWxId(String wxId);
PcloudRobot getPcloudRobotByType(Integer robotType);
......
package com.pcloud.book.pcloudkeyword.dao.impl;
import com.google.common.collect.Maps;
import com.pcloud.book.pcloudKeyword.dto.RobotClassifyDTO;
import com.pcloud.book.pcloudkeyword.dao.PcloudRobotDao;
import com.pcloud.book.pcloudkeyword.entity.PcloudRobot;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -13,6 +16,14 @@ import java.util.Map;
public class PcloudRobotDaoImpl extends BaseDaoImpl<PcloudRobot> implements PcloudRobotDao {
@Override
public void updateRealStatus(String wxId, Integer realStatus) {
Map<String, Object> map = Maps.newHashMap();
map.put("realStatus", realStatus);
map.put("wxId", wxId);
this.getSqlSession().update("updateRealStatus", map);
}
@Override
public PcloudRobot getByWxId(String wxId) {
return super.getSqlSession().selectOne(getStatement("getByWxId"), wxId);
}
......
......@@ -44,6 +44,9 @@ public class PcloudRobot extends BaseEntity {
@ApiModelProperty("状态:1 在线 2 离线")
private Integer state;
@ApiModelProperty("真实状态:1 在线 2 离线")
private Integer realStatus;
@ApiModelProperty("小号回复欢迎语")
private List<PcloudRobotWelcome> robotWelcomeList;
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.pcloud.book.pcloudkeyword.dao.impl.PcloudRobotDaoImpl" >
<resultMap id="BaseResultMap" type="PcloudRobot" >
<resultMap id="BaseResultMap" type="com.pcloud.book.pcloudkeyword.entity.PcloudRobot" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="wx_id" property="wxId" jdbcType="VARCHAR" />
<result column="nick_name" property="nickName" jdbcType="VARCHAR" />
......@@ -10,12 +10,13 @@
<result column="robot_type" jdbcType="INTEGER" property="robotType" />
<result column="keyword_classify_id" jdbcType="BIGINT" property="keywordClassifyId" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="real_status" property="realStatus" jdbcType="INTEGER" />
<result column="wake_up" property="wakeUp" jdbcType="INTEGER" />
<result column="unique_number" property="uniqueNumber" jdbcType="VARCHAR"/>
<result column="welcome_duration" property="welcomeDuration" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
id, wx_id, nick_name, head, qrcode_url, robot_type, keyword_classify_id, state, wake_up, unique_number,welcome_duration
id, wx_id, nick_name, head, qrcode_url, robot_type, keyword_classify_id, state, real_status, wake_up, unique_number,welcome_duration
</sql>
<insert id="insert" parameterType="PcloudRobot" useGeneratedKeys="true" keyProperty="id">
......@@ -27,6 +28,7 @@
robot_type,
keyword_classify_id,
state,
real_status,
wake_up,
unique_number,
welcome_duration
......@@ -39,6 +41,7 @@
#{robotType,jdbcType=INTEGER},
#{keywordClassifyId,jdbcType=BIGINT},
#{state,jdbcType=INTEGER},
#{realStatus,jdbcType=INTEGER},
#{wakeUp,jdbcType=INTEGER},
#{uniqueNumber, jdbcType=VARCHAR},
#{welcomeDuration, jdbcType=INTEGER}
......@@ -69,6 +72,9 @@
<if test="state != null">
state = #{state,jdbcType=INTEGER},
</if>
<if test="realStatus != null">
real_status = #{realStatus,jdbcType=INTEGER},
</if>
<if test="wakeUp != null">
wake_up = #{wakeUp,jdbcType=INTEGER},
</if>
......@@ -103,6 +109,9 @@
<if test="state != null">
state = #{state,jdbcType=INTEGER},
</if>
<if test="realStatus != null">
real_status = #{realStatus,jdbcType=INTEGER},
</if>
<if test="wakeUp != null">
wake_up = #{wakeUp,jdbcType=INTEGER},
</if>
......@@ -122,6 +131,12 @@
where id=#{id}
</update>
<update id="updateRealStatus" parameterType="map">
update pcloud_robot set
real_status = #{realStatus}
where wx_id=#{wxId}
</update>
<select id="getById" parameterType="long" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from pcloud_robot where id=#{id}
......@@ -136,6 +151,7 @@
r.qrcode_url qrcodeUrl,
r.robot_type robotType,
r.state state,
r.real_status realStatus,
r.unique_number uniqueNumber
FROM
pcloud_robot r
......@@ -162,7 +178,7 @@
</select>
<select id="getPcloudKeywordRobotIds" resultType="string">
select wx_id from pcloud_robot where state = 1
select wx_id from pcloud_robot where state = 1 and real_status = 1
</select>
<select id="getByRobotWxId" parameterType="string" resultMap="BaseResultMap">
......@@ -182,6 +198,7 @@
from pcloud_robot
where robot_type = #{robotType}
and state = 1
and real_status = 1
limit 1
</select>
......@@ -222,6 +239,8 @@
p.nick_name nickName,
p.robot_type classifyId,
p.unique_number uniqueNumber,
p.state state,
p.real_status realStatus,
pr.classify_name classifyName
from
pcloud_robot p
......@@ -248,6 +267,7 @@
#{item}
</foreach>
and state = 1
and real_status = 1
</select>
<select id="getRobotCountByClassifyId" parameterType="long" resultType="int">
......
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