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; ...@@ -8,7 +8,9 @@ import com.pcloud.common.core.mq.RabbitMQFactory;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
...@@ -20,6 +22,8 @@ import org.springframework.context.annotation.Configuration; ...@@ -20,6 +22,8 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource; import javax.sql.DataSource;
...@@ -31,6 +35,8 @@ import springfox.documentation.spi.DocumentationType; ...@@ -31,6 +35,8 @@ import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
import static com.pcloud.book.guide.constant.DelayQueueConstant.*;
@SpringBootApplication @SpringBootApplication
@ComponentScan("com.pcloud") @ComponentScan("com.pcloud")
@EnableEurekaClient @EnableEurekaClient
...@@ -232,4 +238,34 @@ public class BookApplication { ...@@ -232,4 +238,34 @@ public class BookApplication {
public Binding someUserScanBookGroupBind(){ public Binding someUserScanBookGroupBind(){
return RabbitMQFactory.bindingExchange(someUserScanBookGroupQueue(), MQTopicProducer.SOME_USER_SCAN_BOOK_GROUP); 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; ...@@ -34,6 +34,7 @@ import com.pcloud.book.group.enums.CipherTypeEnum;
import com.pcloud.book.group.enums.TouchTypeEnum; import com.pcloud.book.group.enums.TouchTypeEnum;
import com.pcloud.book.group.tools.SendWeixinRequestTools; import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO; 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.entity.PcloudGuide;
import com.pcloud.book.guide.mapper.PcloudGuideMapper; import com.pcloud.book.guide.mapper.PcloudGuideMapper;
import com.pcloud.book.guide.mapper.PcloudGuideMessageMapper; import com.pcloud.book.guide.mapper.PcloudGuideMessageMapper;
...@@ -80,7 +81,12 @@ import com.sdk.wxgroup.SendMessageTypeEnum; ...@@ -80,7 +81,12 @@ import com.sdk.wxgroup.SendMessageTypeEnum;
import com.sdk.wxgroup.SendPicMessageVO; import com.sdk.wxgroup.SendPicMessageVO;
import com.sdk.wxgroup.SendTextMessageVO; import com.sdk.wxgroup.SendTextMessageVO;
import com.sdk.wxgroup.WxGroupSDK; 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.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -94,8 +100,14 @@ import java.util.Date; ...@@ -94,8 +100,14 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; 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 * @author lily
* @date 2019/4/23 15:47 * @date 2019/4/23 15:47
...@@ -153,6 +165,8 @@ public class BookGuideBizImpl implements BookGuideBiz { ...@@ -153,6 +165,8 @@ public class BookGuideBizImpl implements BookGuideBiz {
private PcloudRobotDao pcloudRobotDao; private PcloudRobotDao pcloudRobotDao;
@Autowired @Autowired
private PcloudGuideMapper pcloudGuideMapper; private PcloudGuideMapper pcloudGuideMapper;
@Autowired
private RabbitTemplate rabbitTemplate;
@Value("${system.env}") @Value("${system.env}")
private String envStr; private String envStr;
...@@ -323,30 +337,18 @@ public class BookGuideBizImpl implements BookGuideBiz { ...@@ -323,30 +337,18 @@ public class BookGuideBizImpl implements BookGuideBiz {
if (null != pcloudRobot) { if (null != pcloudRobot) {
List<PcloudGuide> list = pcloudGuideMapper.listByRobotId(robotId); List<PcloudGuide> list = pcloudGuideMapper.listByRobotId(robotId);
if (!ListUtils.isEmpty(list)) { if (!ListUtils.isEmpty(list)) {
AtomicInteger timeSpan = new AtomicInteger();
list.forEach(pcloudGuide -> { list.forEach(pcloudGuide -> {
//todo 此处要考虑时间间隔 timeSpan.addAndGet(pcloudGuide.getTimeSpan() == null ? 0 : pcloudGuide.getTimeSpan());
Integer timeSpan = pcloudGuide.getTimeSpan();
List<PcloudGuideMessageVO> messageVOList = pcloudGuideMessageMapper.listByGuideId(pcloudGuide.getId()); List<PcloudGuideMessageVO> messageVOList = pcloudGuideMessageMapper.listByGuideId(pcloudGuide.getId());
messageVOList.forEach(message -> { messageVOList.forEach(message -> {
Integer replyType = message.getReplyType(); PcloudGuideDelayMsgDto msgDto = PcloudGuideDelayMsgDto.builder().pcloudGuideMessageVO(message)
if (ReplyTypeEnum.TEXT.value.equals(replyType)){ .code(code).ip(ip).robotId(robotId).wxId(userWxId).build();
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO(); MessageProperties properties = new MessageProperties();
sendTextMessageVO.setContent(message.getContent()); properties.setContentType("text/plain");
sendTextMessageVO.setAltId(robotId); properties.setExpiration(String.valueOf(timeSpan.get() * 1000));
sendTextMessageVO.setWxGroupId(userWxId); Message mqMessage = MessageBuilder.withBody(JSONObject.toJSONString(msgDto).getBytes()).andProperties(properties).build();
sendTextMessageVO.setIp(ip); rabbitTemplate.convertAndSend(BOOK_DELAY_EXCHANGE, BOOK_DELAY_DEAD_LETTER_KEY, mqMessage);
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);
}
}); });
}); });
} }
......
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