Commit 776317fd by 章春雨

Merge branch 'feature-1002281' into 'master'

feature-1002281

See merge request rays/pcloud-book!369
parents 10bf6083 7d2facd0
......@@ -8,7 +8,9 @@ import com.pcloud.common.core.mq.RabbitMQFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......@@ -20,6 +22,8 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
......@@ -31,6 +35,8 @@ import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import static com.pcloud.book.guide.constant.DelayQueueConstant.*;
@SpringBootApplication
@ComponentScan("com.pcloud")
@EnableEurekaClient
......@@ -232,4 +238,34 @@ public class BookApplication {
public Binding someUserScanBookGroupBind(){
return RabbitMQFactory.bindingExchange(someUserScanBookGroupQueue(), MQTopicProducer.SOME_USER_SCAN_BOOK_GROUP);
}
@Bean
public DirectExchange pcloudGuideDelayExchange(){
return new DirectExchange(BOOK_DELAY_EXCHANGE,true,false);
}
@Bean
public Queue pcloudGuideDelayMessageQueue(){
return QueueBuilder.durable(BOOK_DELAY_QUEUE).build();
}
@Bean
public Binding pcloudGuideDelayQueueBinding(){
return new Binding(BOOK_DELAY_QUEUE, Binding.DestinationType.QUEUE, BOOK_DELAY_EXCHANGE, BOOK_DELAY_KEY, null);
}
@Bean
public Queue pcloudGuideDelayDeadLetterQueue(){
Map<String, Object> properties = new HashMap<>();
properties.put("x-dead-letter-exchange", BOOK_DELAY_EXCHANGE);
properties.put("x-dead-letter-routing-key", BOOK_DELAY_KEY);
return QueueBuilder.durable(BOOK_DELAY_DEAD_LETTER_QUEUE).withArguments(properties).build();
}
@Bean
public Binding pcloudGuideDelayDeadLetterQueueBinding(){
return new Binding(BOOK_DELAY_DEAD_LETTER_QUEUE, Binding.DestinationType.QUEUE, BOOK_DELAY_EXCHANGE, BOOK_DELAY_DEAD_LETTER_KEY, null);
}
}
package com.pcloud.book.guide.constant;
public class DelayQueueConstant {
public static final String BOOK_DELAY_EXCHANGE = "BOOK_PCLOUD_GUIDE_DELAY_EXCHANGE";
public static final String BOOK_DELAY_QUEUE = "BOOK_PCLOUD_GUIDE_DELAY_QUEUE";
public static final String BOOK_DELAY_KEY = "BOOK_PCLOUD_GUIDE_DELAY_ROUTING_KEY";
public static final String BOOK_DELAY_DEAD_LETTER_QUEUE = "BOOK_PCLOUD_GUIDE_DELAY_DEAD_LETTER_QUEUE";
public static final String BOOK_DELAY_DEAD_LETTER_KEY = "BOOK_PCLOUD_GUIDE_DELAY_DEAD_LETTER_ROUTING_KEY";
}
package com.pcloud.book.guide.dto;
import com.pcloud.book.guide.vo.PcloudGuideMessageVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PcloudGuideDelayMsgDto {
private PcloudGuideMessageVO pcloudGuideMessageVO;
private String robotId;
private String wxId;
private String ip;
private Integer code;
}
package com.pcloud.book.guide.listener;
import com.alibaba.fastjson.JSONObject;
import com.pcloud.book.guide.dto.PcloudGuideDelayMsgDto;
import com.pcloud.book.guide.vo.PcloudGuideMessageVO;
import com.pcloud.book.keywords.enums.ReplyTypeEnum;
import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.WxGroupSDK;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;
import static com.pcloud.book.guide.constant.DelayQueueConstant.BOOK_DELAY_QUEUE;
/**
* 平台端 个人号 引导语 延时消息监听
*/
@Slf4j
@Component
public class PcloudGuideListener {
@RabbitListener(queues = BOOK_DELAY_QUEUE)
@RabbitHandler
public void activeRemind(@Payload String body) {
PcloudGuideDelayMsgDto msgDto = JSONObject.parseObject(body, PcloudGuideDelayMsgDto.class);
PcloudGuideMessageVO message = msgDto.getPcloudGuideMessageVO();
Integer replyType = message.getReplyType();
if (ReplyTypeEnum.TEXT.value.equals(replyType)){
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(message.getContent());
sendTextMessageVO.setAltId(msgDto.getRobotId());
sendTextMessageVO.setWxGroupId(msgDto.getWxId());
sendTextMessageVO.setIp(msgDto.getIp());
sendTextMessageVO.setCode(msgDto.getCode());
WxGroupSDK.sendTextMessage(sendTextMessageVO);
}
if (ReplyTypeEnum.IMAGE.value.equals(replyType)) {
SendPicMessageVO sendPicMessageVO = new SendPicMessageVO();
sendPicMessageVO.setPicUrl(message.getPicUrl());
sendPicMessageVO.setAltId(msgDto.getRobotId());
sendPicMessageVO.setWxGroupId(msgDto.getWxId());
sendPicMessageVO.setIp(msgDto.getIp());
sendPicMessageVO.setCode(msgDto.getCode());
WxGroupSDK.sendPicMessage(sendPicMessageVO);
}
}
}
......@@ -34,6 +34,7 @@ import com.pcloud.book.group.enums.CipherTypeEnum;
import com.pcloud.book.group.enums.TouchTypeEnum;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO;
import com.pcloud.book.guide.dto.PcloudGuideDelayMsgDto;
import com.pcloud.book.guide.entity.PcloudGuide;
import com.pcloud.book.guide.mapper.PcloudGuideMapper;
import com.pcloud.book.guide.mapper.PcloudGuideMessageMapper;
......@@ -80,7 +81,12 @@ import com.sdk.wxgroup.SendMessageTypeEnum;
import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.WxGroupSDK;
import lombok.extern.slf4j.Slf4j;
import com.sdk.wxgroup.*;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -94,8 +100,14 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import static com.pcloud.book.guide.constant.DelayQueueConstant.BOOK_DELAY_DEAD_LETTER_KEY;
import static com.pcloud.book.guide.constant.DelayQueueConstant.BOOK_DELAY_EXCHANGE;
/**
* @author lily
* @date 2019/4/23 15:47
......@@ -153,6 +165,8 @@ public class BookGuideBizImpl implements BookGuideBiz {
private PcloudRobotDao pcloudRobotDao;
@Autowired
private PcloudGuideMapper pcloudGuideMapper;
@Autowired
private RabbitTemplate rabbitTemplate;
@Value("${system.env}")
private String envStr;
......@@ -323,30 +337,18 @@ public class BookGuideBizImpl implements BookGuideBiz {
if (null != pcloudRobot) {
List<PcloudGuide> list = pcloudGuideMapper.listByRobotId(robotId);
if (!ListUtils.isEmpty(list)) {
AtomicInteger timeSpan = new AtomicInteger();
list.forEach(pcloudGuide -> {
//todo 此处要考虑时间间隔
Integer timeSpan = pcloudGuide.getTimeSpan();
timeSpan.addAndGet(pcloudGuide.getTimeSpan() == null ? 0 : pcloudGuide.getTimeSpan());
List<PcloudGuideMessageVO> messageVOList = pcloudGuideMessageMapper.listByGuideId(pcloudGuide.getId());
messageVOList.forEach(message -> {
Integer replyType = message.getReplyType();
if (ReplyTypeEnum.TEXT.value.equals(replyType)){
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(message.getContent());
sendTextMessageVO.setAltId(robotId);
sendTextMessageVO.setWxGroupId(userWxId);
sendTextMessageVO.setIp(ip);
sendTextMessageVO.setCode(code);
WxGroupSDK.sendTextMessage(sendTextMessageVO);
}
if (ReplyTypeEnum.IMAGE.value.equals(replyType)) {
SendPicMessageVO sendPicMessageVO = new SendPicMessageVO();
sendPicMessageVO.setWxGroupId(userWxId);
sendPicMessageVO.setAltId(robotId);
sendPicMessageVO.setPicUrl(message.getPicUrl());
sendPicMessageVO.setIp(ip);
sendPicMessageVO.setCode(code);
WxGroupSDK.sendPicMessage(sendPicMessageVO);
}
PcloudGuideDelayMsgDto msgDto = PcloudGuideDelayMsgDto.builder().pcloudGuideMessageVO(message)
.code(code).ip(ip).robotId(robotId).wxId(userWxId).build();
MessageProperties properties = new MessageProperties();
properties.setContentType("text/plain");
properties.setExpiration(String.valueOf(timeSpan.get() * 1000));
Message mqMessage = MessageBuilder.withBody(JSONObject.toJSONString(msgDto).getBytes()).andProperties(properties).build();
rabbitTemplate.convertAndSend(BOOK_DELAY_EXCHANGE, BOOK_DELAY_DEAD_LETTER_KEY, mqMessage);
});
});
}
......
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