Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
midjourney-proxy
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
徐少华
midjourney-proxy
Commits
3f52348b
Commit
3f52348b
authored
Feb 10, 2020
by
桂前礼
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
个人号缄默时长的自定义配置
parent
8ce16ecf
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
474 additions
and
127 deletions
+474
-127
RobotSilenceVO.java
...rc/main/java/com/pcloud/book/guide/vo/RobotSilenceVO.java
+13
-0
BookApplication.java
...e-book/src/main/java/com/pcloud/book/BookApplication.java
+0
-30
PcloudGuideBiz.java
...c/main/java/com/pcloud/book/guide/biz/PcloudGuideBiz.java
+3
-5
PcloudGuideBizImpl.java
...va/com/pcloud/book/guide/biz/impl/PcloudGuideBizImpl.java
+14
-6
PcloudGuideRedisConstant.java
.../pcloud/book/guide/constant/PcloudGuideRedisConstant.java
+13
-0
PcloudGuideDelayDto.java
...n/java/com/pcloud/book/guide/dto/PcloudGuideDelayDto.java
+19
-5
PcloudRobotSilence.java
...java/com/pcloud/book/guide/entity/PcloudRobotSilence.java
+56
-0
PcloudGuideFacadeImpl.java
.../pcloud/book/guide/facade/impl/PcloudGuideFacadeImpl.java
+15
-0
PcloudGuideListener.java
...a/com/pcloud/book/guide/listener/PcloudGuideListener.java
+0
-53
PcloudGuideMapper.java
.../java/com/pcloud/book/guide/mapper/PcloudGuideMapper.java
+3
-0
PcloudRobotSilenceMapper.java
...om/pcloud/book/guide/mapper/PcloudRobotSilenceMapper.java
+38
-0
PcloudGuideSilenceRunnerImpl.java
...cloud/book/guide/runner/PcloudGuideSilenceRunnerImpl.java
+116
-0
BookGuideBizImpl.java
...a/com/pcloud/book/keywords/biz/impl/BookGuideBizImpl.java
+15
-24
WxGroupSendTextListener.java
...ava/com/pcloud/book/mq/topic/WxGroupSendTextListener.java
+33
-2
PcloudRobotBizImpl.java
...cloud/book/pcloudkeyword/biz/impl/PcloudRobotBizImpl.java
+8
-2
PcloudRobot.java
...ava/com/pcloud/book/pcloudkeyword/entity/PcloudRobot.java
+3
-0
PcloudGuideMapper.xml
...ook/src/main/resources/mapper/guide/PcloudGuideMapper.xml
+13
-0
PcloudRobotSilenceMapper.xml
.../main/resources/mapper/guide/PcloudRobotSilenceMapper.xml
+112
-0
No files found.
pcloud-facade-book/src/main/java/com/pcloud/book/guide/vo/RobotSilenceVO.java
0 → 100644
View file @
3f52348b
package
com
.
pcloud
.
book
.
guide
.
vo
;
import
lombok.Data
;
@Data
public
class
RobotSilenceVO
{
private
String
robotWxId
;
private
Integer
silenceDuration
;
}
pcloud-service-book/src/main/java/com/pcloud/book/BookApplication.java
View file @
3f52348b
...
...
@@ -238,34 +238,4 @@ 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
);
}
}
pcloud-service-book/src/main/java/com/pcloud/book/guide/biz/PcloudGuideBiz.java
View file @
3f52348b
package
com
.
pcloud
.
book
.
guide
.
biz
;
import
com.pcloud.book.guide.vo.Create4RobotVO
;
import
com.pcloud.book.guide.vo.CreatePcloudGuideVO
;
import
com.pcloud.book.guide.vo.PcloudGuideVO
;
import
com.pcloud.book.guide.vo.UpdatePcloudGuideVO
;
import
com.pcloud.book.guide.vo.UpdateSeqNumVO
;
import
com.pcloud.book.guide.vo.*
;
import
com.pcloud.common.page.PageBeanNew
;
public
interface
PcloudGuideBiz
{
...
...
@@ -22,4 +18,6 @@ public interface PcloudGuideBiz {
void
updateSeqNum
(
UpdateSeqNumVO
updateSeqNumVO
);
void
create4Robot
(
Create4RobotVO
create4RobotVO
);
void
setSilenceDuration
(
RobotSilenceVO
robotSilenceVO
);
}
pcloud-service-book/src/main/java/com/pcloud/book/guide/biz/impl/PcloudGuideBizImpl.java
View file @
3f52348b
...
...
@@ -6,15 +6,12 @@ import com.pcloud.book.guide.entity.PcloudGuide;
import
com.pcloud.book.guide.entity.PcloudGuideMessage
;
import
com.pcloud.book.guide.mapper.PcloudGuideMapper
;
import
com.pcloud.book.guide.mapper.PcloudGuideMessageMapper
;
import
com.pcloud.book.guide.vo.Create4RobotVO
;
import
com.pcloud.book.guide.vo.CreatePcloudGuideVO
;
import
com.pcloud.book.guide.vo.PcloudGuideMessageVO
;
import
com.pcloud.book.guide.vo.PcloudGuideVO
;
import
com.pcloud.book.guide.vo.UpdatePcloudGuideVO
;
import
com.pcloud.book.guide.vo.UpdateSeqNumVO
;
import
com.pcloud.book.guide.mapper.PcloudRobotSilenceMapper
;
import
com.pcloud.book.guide.vo.*
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.utils.BeanUtils
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.string.StringUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -31,6 +28,9 @@ public class PcloudGuideBizImpl implements PcloudGuideBiz {
@Autowired
private
PcloudGuideMessageMapper
pcloudGuideMessageMapper
;
@Autowired
private
PcloudRobotSilenceMapper
pcloudRobotSilenceMapper
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Integer
addPcloudGuide
(
CreatePcloudGuideVO
createPcloudGuideVO
)
{
...
...
@@ -156,4 +156,12 @@ public class PcloudGuideBizImpl implements PcloudGuideBiz {
pcloudGuideMessageMapper
.
batchInsert
(
list
);
}
}
@Override
public
void
setSilenceDuration
(
RobotSilenceVO
robotSilenceVO
)
{
if
(
StringUtil
.
isEmpty
(
robotSilenceVO
.
getRobotWxId
()))
{
throw
new
BookBizException
(
BookBizException
.
PARAM_IS_ERROR
,
"参数错误!"
);
}
pcloudRobotSilenceMapper
.
setSilenceDuration
(
robotSilenceVO
.
getRobotWxId
(),
robotSilenceVO
.
getSilenceDuration
());
}
}
pcloud-service-book/src/main/java/com/pcloud/book/guide/constant/PcloudGuideRedisConstant.java
0 → 100644
View file @
3f52348b
package
com
.
pcloud
.
book
.
guide
.
constant
;
/**
* 平台端引导语发送 缓存常量
* @author Gui_q
*/
public
class
PcloudGuideRedisConstant
{
public
static
final
String
PCLOUD_GUIDE_SUFFIX
=
"_PCLOUD_GUIDE_DELAY_PUSH"
;
public
static
final
String
PCLOUD_GUIDE_LOCK
=
"PCLOUD_GUIDE_SILENCE_RUNNER_IMPL_LOCK"
;
}
pcloud-service-book/src/main/java/com/pcloud/book/guide/dto/PcloudGuideDelay
Msg
Dto.java
→
pcloud-service-book/src/main/java/com/pcloud/book/guide/dto/PcloudGuideDelayDto.java
View file @
3f52348b
...
...
@@ -6,20 +6,34 @@ import lombok.Builder;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Date
;
import
java.util.List
;
/**
* 平台端引导语 延时发送信息
* @author Gui_q
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public
class
PcloudGuideDelayMsgDto
{
private
PcloudGuideMessageVO
pcloudGuideMessageVO
;
public
class
PcloudGuideDelayDto
{
private
String
robotId
;
private
Date
sendTime
;
private
String
wxId
;
private
Integer
spanTime
;
private
String
ip
;
private
String
userWxId
;
private
String
robotWxId
;
private
Integer
code
;
private
Integer
num
;
private
Integer
duration
;
private
List
<
PcloudGuideMessageVO
>
msgList
;
}
pcloud-service-book/src/main/java/com/pcloud/book/guide/entity/PcloudRobotSilence.java
0 → 100644
View file @
3f52348b
package
com
.
pcloud
.
book
.
guide
.
entity
;
import
java.util.Date
;
public
class
PcloudRobotSilence
{
private
Integer
id
;
private
String
robotWxId
;
private
Integer
silenceDuration
;
private
Date
createTime
;
private
Date
updateTime
;
public
Integer
getId
()
{
return
id
;
}
public
void
setId
(
Integer
id
)
{
this
.
id
=
id
;
}
public
String
getRobotWxId
()
{
return
robotWxId
;
}
public
void
setRobotWxId
(
String
robotWxId
)
{
this
.
robotWxId
=
robotWxId
==
null
?
null
:
robotWxId
.
trim
();
}
public
Integer
getSilenceDuration
()
{
return
silenceDuration
;
}
public
void
setSilenceDuration
(
Integer
silenceDuration
)
{
this
.
silenceDuration
=
silenceDuration
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
public
Date
getUpdateTime
()
{
return
updateTime
;
}
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
}
}
\ No newline at end of file
pcloud-service-book/src/main/java/com/pcloud/book/guide/facade/impl/PcloudGuideFacadeImpl.java
View file @
3f52348b
...
...
@@ -7,11 +7,14 @@ import com.pcloud.book.guide.vo.CreatePcloudGuideVO;
import
com.pcloud.book.guide.vo.PcloudGuideVO
;
import
com.pcloud.book.guide.vo.UpdatePcloudGuideVO
;
import
com.pcloud.book.guide.vo.UpdateSeqNumVO
;
import
com.pcloud.book.guide.vo.RobotSilenceVO
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.exceptions.BizException
;
import
com.pcloud.common.page.PageBeanNew
;
import
com.pcloud.common.permission.PermissionException
;
import
com.pcloud.common.utils.SessionUtil
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.GetMapping
;
...
...
@@ -83,4 +86,16 @@ public class PcloudGuideFacadeImpl {
pcloudGuideBiz
.
create4Robot
(
create4RobotVO
);
return
new
ResponseDto
<>();
}
@ApiOperation
(
"机器人小号设置缄默时长"
)
@PostMapping
(
"/setSilenceDuration"
)
ResponseDto
<?>
setSilenceDuration
(
@RequestHeader
(
"token"
)
@ApiParam
(
"token信息"
)
String
token
,
@RequestBody
@ApiParam
(
"机器人小号缄默信息"
)
RobotSilenceVO
robotSilenceVO
)
throws
BizException
,
PermissionException
{
SessionUtil
.
getInfoToken4Redis
(
token
);
pcloudGuideBiz
.
setSilenceDuration
(
robotSilenceVO
);
return
new
ResponseDto
<>();
}
}
pcloud-service-book/src/main/java/com/pcloud/book/guide/listener/PcloudGuideListener.java
deleted
100644 → 0
View file @
8ce16ecf
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
);
}
}
}
pcloud-service-book/src/main/java/com/pcloud/book/guide/mapper/PcloudGuideMapper.java
View file @
3f52348b
...
...
@@ -31,4 +31,6 @@ public interface PcloudGuideMapper {
void
updateSeqNum
(
@Param
(
"id"
)
Integer
pcloudGuideId
,
@Param
(
"seqNum"
)
Integer
seqNum
);
List
<
PcloudGuide
>
listByRobotId
(
String
robotId
);
PcloudGuide
getFirstByRobotId
(
@Param
(
"robotId"
)
String
robotId
,
@Param
(
"num"
)
int
num
);
}
\ No newline at end of file
pcloud-service-book/src/main/java/com/pcloud/book/guide/mapper/PcloudRobotSilenceMapper.java
0 → 100644
View file @
3f52348b
package
com
.
pcloud
.
book
.
guide
.
mapper
;
import
com.pcloud.book.guide.entity.PcloudRobotSilence
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
@Component
public
interface
PcloudRobotSilenceMapper
{
int
deleteByPrimaryKey
(
Integer
id
);
int
insert
(
PcloudRobotSilence
record
);
int
insertSelective
(
PcloudRobotSilence
record
);
PcloudRobotSilence
selectByPrimaryKey
(
Integer
id
);
int
updateByPrimaryKeySelective
(
PcloudRobotSilence
record
);
int
updateByPrimaryKey
(
PcloudRobotSilence
record
);
/**
* 查询所有平台端 引导语 缄默设置相关的机器人
*/
List
<
String
>
listRobots
();
/**
* 根据机器人wxid获取缄默时长
*/
Integer
getSilenceDurationByRobotWxId
(
@Param
(
"wxId"
)
String
wxId
);
/**
* 设置机器人缄默时长
*/
void
setSilenceDuration
(
@Param
(
"robotWxId"
)
String
robotWxId
,
@Param
(
"silenceDuration"
)
Integer
silenceDuration
);
}
\ No newline at end of file
pcloud-service-book/src/main/java/com/pcloud/book/guide/runner/PcloudGuideSilenceRunnerImpl.java
0 → 100644
View file @
3f52348b
package
com
.
pcloud
.
book
.
guide
.
runner
;
import
com.alibaba.fastjson.JSONObject
;
import
com.pcloud.book.guide.dto.PcloudGuideDelayDto
;
import
com.pcloud.book.guide.entity.PcloudGuide
;
import
com.pcloud.book.guide.mapper.PcloudGuideMapper
;
import
com.pcloud.book.guide.mapper.PcloudGuideMessageMapper
;
import
com.pcloud.book.guide.mapper.PcloudRobotSilenceMapper
;
import
com.pcloud.book.guide.vo.PcloudGuideMessageVO
;
import
com.pcloud.book.keywords.enums.ReplyTypeEnum
;
import
com.pcloud.common.utils.DateUtils
;
import
com.pcloud.common.utils.cache.redis.JedisClusterUtils
;
import
com.sdk.wxgroup.SendPicMessageVO
;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.ApplicationArguments
;
import
org.springframework.boot.ApplicationRunner
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
static
com
.
pcloud
.
book
.
guide
.
constant
.
PcloudGuideRedisConstant
.
PCLOUD_GUIDE_LOCK
;
import
static
com
.
pcloud
.
book
.
guide
.
constant
.
PcloudGuideRedisConstant
.
PCLOUD_GUIDE_SUFFIX
;
/**
* 小睿引导语 间隔发送
*/
@Slf4j
@Component
public
class
PcloudGuideSilenceRunnerImpl
implements
ApplicationRunner
{
@Autowired
private
PcloudRobotSilenceMapper
pcloudRobotSilenceMapper
;
@Autowired
private
PcloudGuideMapper
pcloudGuideMapper
;
@Autowired
private
PcloudGuideMessageMapper
pcloudGuideMessageMapper
;
@Override
public
void
run
(
ApplicationArguments
applicationArguments
)
throws
Exception
{
log
.
info
(
"[项目启动后 定时检查引导与推送]"
);
if
(!
JedisClusterUtils
.
setnx
(
PCLOUD_GUIDE_LOCK
,
PCLOUD_GUIDE_LOCK
))
{
JedisClusterUtils
.
expire
(
PCLOUD_GUIDE_LOCK
,
15
*
60
);
return
;
}
new
Thread
(()
->
{
log
.
info
(
"[PcloudGuideSilenceRunnerImpl] 线程启动成功"
);
while
(
true
)
{
try
{
Thread
.
sleep
(
1000
);
List
<
String
>
robots
=
pcloudRobotSilenceMapper
.
listRobots
();
for
(
String
robotWxid
:
robots
)
{
Map
<
String
,
String
>
friends
=
JedisClusterUtils
.
hgetAll
(
robotWxid
+
PCLOUD_GUIDE_SUFFIX
);
if
(
friends
==
null
)
{
continue
;
}
Set
<
String
>
userSet
=
friends
.
keySet
();
for
(
String
userId
:
userSet
)
{
PcloudGuideDelayDto
pcloudGuideDelayDto
=
JSONObject
.
parseObject
(
friends
.
get
(
userId
),
PcloudGuideDelayDto
.
class
);
// 超时 推送引导语
if
(!
DateUtils
.
addSecond
(
pcloudGuideDelayDto
.
getSendTime
(),
pcloudGuideDelayDto
.
getSpanTime
()
+
pcloudGuideDelayDto
.
getDuration
()).
after
(
new
Date
()))
{
// 发送消息
for
(
PcloudGuideMessageVO
message
:
pcloudGuideDelayDto
.
getMsgList
())
{
Integer
replyType
=
message
.
getReplyType
();
if
(
ReplyTypeEnum
.
TEXT
.
value
.
equals
(
replyType
))
{
SendTextMessageVO
sendTextMessageVO
=
new
SendTextMessageVO
();
sendTextMessageVO
.
setContent
(
message
.
getContent
());
sendTextMessageVO
.
setAltId
(
pcloudGuideDelayDto
.
getRobotWxId
());
sendTextMessageVO
.
setWxGroupId
(
pcloudGuideDelayDto
.
getUserWxId
());
sendTextMessageVO
.
setIp
(
pcloudGuideDelayDto
.
getIp
());
sendTextMessageVO
.
setCode
(
pcloudGuideDelayDto
.
getCode
());
WxGroupSDK
.
sendTextMessage
(
sendTextMessageVO
);
}
if
(
ReplyTypeEnum
.
IMAGE
.
value
.
equals
(
replyType
))
{
SendPicMessageVO
sendPicMessageVO
=
new
SendPicMessageVO
();
sendPicMessageVO
.
setPicUrl
(
message
.
getPicUrl
());
sendPicMessageVO
.
setAltId
(
pcloudGuideDelayDto
.
getRobotWxId
());
sendPicMessageVO
.
setWxGroupId
(
pcloudGuideDelayDto
.
getUserWxId
());
sendPicMessageVO
.
setIp
(
pcloudGuideDelayDto
.
getIp
());
sendPicMessageVO
.
setCode
(
pcloudGuideDelayDto
.
getCode
());
WxGroupSDK
.
sendPicMessage
(
sendPicMessageVO
);
}
}
// 向缓存中写入下一条
PcloudGuide
pcloudGuide
=
pcloudGuideMapper
.
getFirstByRobotId
(
pcloudGuideDelayDto
.
getRobotWxId
(),
pcloudGuideDelayDto
.
getNum
()
+
1
);
if
(
pcloudGuide
!=
null
)
{
List
<
PcloudGuideMessageVO
>
messageVOList
=
pcloudGuideMessageMapper
.
listByGuideId
(
pcloudGuide
.
getId
());
PcloudGuideDelayDto
guideDelayDto
=
PcloudGuideDelayDto
.
builder
().
sendTime
(
new
Date
()).
duration
(
0
)
.
spanTime
((
pcloudGuide
.
getTimeSpan
()
==
null
?
0
:
pcloudGuide
.
getTimeSpan
())).
num
(
pcloudGuideDelayDto
.
getNum
()
+
1
)
.
robotWxId
(
pcloudGuideDelayDto
.
getRobotWxId
()).
ip
(
pcloudGuideDelayDto
.
getIp
()).
code
(
pcloudGuideDelayDto
.
getCode
()).
msgList
(
messageVOList
).
build
();
JedisClusterUtils
.
hset
(
pcloudGuideDelayDto
.
getRobotWxId
()
+
PCLOUD_GUIDE_SUFFIX
,
pcloudGuideDelayDto
.
getUserWxId
(),
JSONObject
.
toJSONString
(
guideDelayDto
));
}
else
{
// 最后一条 删除缓存
JedisClusterUtils
.
hdel
(
pcloudGuideDelayDto
.
getRobotWxId
()
+
PCLOUD_GUIDE_SUFFIX
,
userId
);
}
}
}
}
}
catch
(
InterruptedException
e
)
{
log
.
error
(
"引导语延时发送,处理失败"
,
e
);
}
}
}).
start
();
}
}
pcloud-service-book/src/main/java/com/pcloud/book/keywords/biz/impl/BookGuideBizImpl.java
View file @
3f52348b
...
...
@@ -34,10 +34,11 @@ 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.PcloudGuideDelay
Msg
Dto
;
import
com.pcloud.book.guide.dto.PcloudGuideDelayDto
;
import
com.pcloud.book.guide.entity.PcloudGuide
;
import
com.pcloud.book.guide.mapper.PcloudGuideMapper
;
import
com.pcloud.book.guide.mapper.PcloudGuideMessageMapper
;
import
com.pcloud.book.guide.mapper.PcloudRobotSilenceMapper
;
import
com.pcloud.book.guide.vo.PcloudGuideMessageVO
;
import
com.pcloud.book.keywords.biz.BookGuideBiz
;
import
com.pcloud.book.keywords.biz.BookKeywordBiz
;
...
...
@@ -81,11 +82,7 @@ import com.sdk.wxgroup.SendMessageTypeEnum;
import
com.sdk.wxgroup.SendPicMessageVO
;
import
com.sdk.wxgroup.SendTextMessageVO
;
import
com.sdk.wxgroup.WxGroupSDK
;
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
;
...
...
@@ -100,13 +97,11 @@ 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
;
import
static
com
.
pcloud
.
book
.
guide
.
constant
.
PcloudGuideRedisConstant
.
PCLOUD_GUIDE_SUFFIX
;
/**
* @author lily
...
...
@@ -166,7 +161,7 @@ public class BookGuideBizImpl implements BookGuideBiz {
@Autowired
private
PcloudGuideMapper
pcloudGuideMapper
;
@Autowired
private
RabbitTemplate
rabbitTemplate
;
private
PcloudRobotSilenceMapper
pcloudRobotSilenceMapper
;
@Value
(
"${system.env}"
)
private
String
envStr
;
...
...
@@ -335,22 +330,18 @@ public class BookGuideBizImpl implements BookGuideBiz {
paramMap
.
put
(
"robotWxId"
,
robotId
);
PcloudRobot
pcloudRobot
=
(
PcloudRobot
)
pcloudRobotDao
.
getBy
(
paramMap
,
"getByRobotWxId"
);
if
(
null
!=
pcloudRobot
)
{
List
<
PcloudGuide
>
list
=
pcloudGuideMapper
.
listByRobotId
(
robotId
);
if
(!
ListUtils
.
isEmpty
(
list
))
{
AtomicInteger
timeSpan
=
new
AtomicInteger
();
list
.
forEach
(
pcloudGuide
->
{
timeSpan
.
addAndGet
(
pcloudGuide
.
getTimeSpan
()
==
null
?
0
:
pcloudGuide
.
getTimeSpan
());
PcloudGuide
pcloudGuide
=
pcloudGuideMapper
.
getFirstByRobotId
(
robotId
,
0
);
log
.
info
(
"[sendFriendGuide] 新增好友,推送引导语: {}"
,
pcloudGuide
);
if
(
pcloudGuide
!=
null
)
{
List
<
PcloudGuideMessageVO
>
messageVOList
=
pcloudGuideMessageMapper
.
listByGuideId
(
pcloudGuide
.
getId
());
messageVOList
.
forEach
(
message
->
{
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
);
});
});
PcloudGuideDelayDto
guideDelayDto
=
PcloudGuideDelayDto
.
builder
().
sendTime
(
new
Date
()).
duration
(
0
)
.
spanTime
((
pcloudGuide
.
getTimeSpan
()
==
null
?
0
:
pcloudGuide
.
getTimeSpan
())).
num
(
1
)
.
userWxId
(
agreeAddUserDTO
.
getUserWxId
()).
robotWxId
(
robotId
).
ip
(
ip
).
code
(
code
).
msgList
(
messageVOList
).
build
();
// 加好友 清除历史
JedisClusterUtils
.
hdel
(
agreeAddUserDTO
.
getRobotWxId
()
+
PCLOUD_GUIDE_SUFFIX
,
agreeAddUserDTO
.
getUserWxId
());
log
.
info
(
"[sendFriendGuide] 向缓存中写入延迟发送的引导语:{}"
,
JSONObject
.
toJSONString
(
guideDelayDto
));
JedisClusterUtils
.
hset
(
agreeAddUserDTO
.
getRobotWxId
()
+
PCLOUD_GUIDE_SUFFIX
,
agreeAddUserDTO
.
getUserWxId
(),
JSONObject
.
toJSONString
(
guideDelayDto
));
}
return
;
}
...
...
pcloud-service-book/src/main/java/com/pcloud/book/mq/topic/WxGroupSendTextListener.java
View file @
3f52348b
package
com
.
pcloud
.
book
.
mq
.
topic
;
import
com.alibaba.fastjson.JSONObject
;
import
com.pcloud.book.consumer.wechatgroup.WechatGroupConsr
;
import
com.pcloud.book.group.biz.BookGroupClassifyBiz
;
import
com.pcloud.book.group.dto.GroupClassifyQrcodeDTO
;
import
com.pcloud.book.guide.dto.PcloudGuideDelayDto
;
import
com.pcloud.book.guide.mapper.PcloudRobotSilenceMapper
;
import
com.pcloud.book.keywords.biz.BookKeywordBiz
;
import
com.pcloud.book.mq.config.MQTopicConumer
;
import
com.pcloud.book.reading.biz.ReadingActivityBiz
;
...
...
@@ -12,10 +15,11 @@ import com.pcloud.book.weixinclock.biz.WeixinClockBiz;
import
com.pcloud.common.core.aspect.ParamLog
;
import
com.pcloud.common.exceptions.BizException
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.cache.redis.JedisClusterUtils
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.wechatgroup.message.dto.SendTextDTO
;
import
com.sdk.wxgroup.SendMessageTypeEnum
;
import
lombok.extern.slf4j.Slf4j
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.amqp.rabbit.annotation.RabbitHandler
;
...
...
@@ -23,9 +27,10 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Date
;
import
java.util.List
;
import
lombok.extern.slf4j.Slf4j
;
import
static
com
.
pcloud
.
book
.
guide
.
constant
.
PcloudGuideRedisConstant
.
PCLOUD_GUIDE_SUFFIX
;
/**
* @author lily
...
...
@@ -49,6 +54,8 @@ public class WxGroupSendTextListener {
private
BookGroupClassifyBiz
bookGroupClassifyBiz
;
@Autowired
private
ReadingActivityBiz
readingActivityBiz
;
@Autowired
private
PcloudRobotSilenceMapper
pcloudRobotSilenceMapper
;
/**
* 接收微信用户进群消息
...
...
@@ -62,6 +69,8 @@ public class WxGroupSendTextListener {
String
wechatUserId
=
sendTextDTO
.
getWechatUserId
();
// 更新群人数和群名称
changeGroupInfo
(
sendTextDTO
);
// 缄默设置处理
silenceProcess
(
sendTextDTO
);
//校验是否机器人账号
List
<
String
>
allRobotWxIds
=
wechatGroupConsr
.
listAllRobotWxId
();
if
(!
ListUtils
.
isEmpty
(
allRobotWxIds
)
&&
!
allRobotWxIds
.
contains
(
wechatUserId
)
&&
!
StringUtil
.
isEmpty
(
sendTextDTO
.
getTextContent
()))
{
...
...
@@ -82,6 +91,28 @@ public class WxGroupSendTextListener {
}
/**
* 机器人缄默设置处理
*/
private
void
silenceProcess
(
SendTextDTO
sendTextDTO
)
{
// 个人号消息 用户发送:wechatCreateUser!=wxId,小号发送wechatCreateUser=wxId
if
(
SendMessageTypeEnum
.
SELF
.
getCode
().
equals
(
sendTextDTO
.
getCode
())
&&
!
sendTextDTO
.
getWechatUserId
().
equals
(
sendTextDTO
.
getWxId
()))
{
// 从缓存中获取缄默信息
if
(
JedisClusterUtils
.
hexists
(
sendTextDTO
.
getWxId
()+
PCLOUD_GUIDE_SUFFIX
,
sendTextDTO
.
getWechatUserId
())){
Integer
duration
=
pcloudRobotSilenceMapper
.
getSilenceDurationByRobotWxId
(
sendTextDTO
.
getWxId
());
if
(
duration
==
null
)
{
duration
=
0
;
}
String
hget
=
JedisClusterUtils
.
hget
(
sendTextDTO
.
getWxId
()
+
PCLOUD_GUIDE_SUFFIX
,
sendTextDTO
.
getWechatUserId
());
PcloudGuideDelayDto
pcloudGuideDelayDto
=
JSONObject
.
parseObject
(
hget
,
PcloudGuideDelayDto
.
class
);
pcloudGuideDelayDto
.
setSendTime
(
new
Date
());
// duration
pcloudGuideDelayDto
.
setDuration
(
duration
);
JedisClusterUtils
.
hset
(
sendTextDTO
.
getWxId
()+
PCLOUD_GUIDE_SUFFIX
,
sendTextDTO
.
getWechatUserId
(),
JSONObject
.
toJSONString
(
pcloudGuideDelayDto
));
}
}
}
/**
* 更新群人数和群名称
* @param sendTextDTO 群消息DTO
*/
...
...
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/biz/impl/PcloudRobotBizImpl.java
View file @
3f52348b
...
...
@@ -2,7 +2,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.
keywords.enums.ReplyTypeEnum
;
import
com.pcloud.book.
guide.mapper.PcloudRobotSilenceMapper
;
import
com.pcloud.book.pcloudkeyword.biz.PcloudRobotBiz
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudKeywordClassifyDao
;
import
com.pcloud.book.pcloudkeyword.dao.PcloudRobotDao
;
...
...
@@ -28,7 +28,10 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Component
(
"pcloudRobotBiz"
)
public
class
PcloudRobotBizImpl
implements
PcloudRobotBiz
{
...
...
@@ -45,6 +48,8 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
private
PcloudRobotQrcodeDao
pcloudRobotQrcodeDao
;
@Value
(
"${wechat.group.link.prefix}"
)
private
String
wechatLinkPrefix
;
@Autowired
private
PcloudRobotSilenceMapper
pcloudRobotSilenceMapper
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
@@ -120,6 +125,7 @@ public class PcloudRobotBizImpl implements PcloudRobotBiz {
public
PcloudRobot
getPcloudRobot
(
Long
id
)
{
PcloudRobot
pcloudRobot
=
pcloudRobotDao
.
getById
(
id
);
if
(
pcloudRobot
!=
null
)
{
pcloudRobot
.
setSilenceDuration
(
pcloudRobotSilenceMapper
.
getSilenceDurationByRobotWxId
(
pcloudRobot
.
getWxId
()));
List
<
PcloudRobotWelcome
>
robotWelcomeList
=
pcloudRobotWelcomeDao
.
getRobotWelcomeListByPcloudRobotId
(
pcloudRobot
.
getId
());
fillRobotWelcome
(
robotWelcomeList
);
pcloudRobot
.
setRobotWelcomeList
(
robotWelcomeList
);
...
...
pcloud-service-book/src/main/java/com/pcloud/book/pcloudkeyword/entity/PcloudRobot.java
View file @
3f52348b
...
...
@@ -43,4 +43,7 @@ public class PcloudRobot extends BaseEntity {
@ApiModelProperty
(
"小号回复欢迎语"
)
private
List
<
PcloudRobotWelcome
>
robotWelcomeList
;
@ApiModelProperty
(
"缄默时长"
)
private
Integer
silenceDuration
;
}
pcloud-service-book/src/main/resources/mapper/guide/PcloudGuideMapper.xml
View file @
3f52348b
...
...
@@ -186,4 +186,16 @@
ORDER BY
seq_num ASC
</select>
<select
id=
"getFirstByRobotId"
resultMap=
"BaseResultMap"
>
SELECT
id, time_span, seq_num
FROM
pcloud_guide
WHERE
robot_wx_id = #{robotId}
ORDER BY
seq_num ASC
LIMIT #{num}, 1
</select>
</mapper>
\ No newline at end of file
pcloud-service-book/src/main/resources/mapper/guide/PcloudRobotSilenceMapper.xml
0 → 100644
View file @
3f52348b
<?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.guide.mapper.PcloudRobotSilenceMapper"
>
<resultMap
id=
"BaseResultMap"
type=
"com.pcloud.book.guide.entity.PcloudRobotSilence"
>
<id
column=
"id"
property=
"id"
jdbcType=
"INTEGER"
/>
<result
column=
"robot_wx_id"
property=
"robotWxId"
jdbcType=
"VARCHAR"
/>
<result
column=
"silence_duration"
property=
"silenceDuration"
jdbcType=
"INTEGER"
/>
<result
column=
"create_time"
property=
"createTime"
jdbcType=
"TIMESTAMP"
/>
<result
column=
"update_time"
property=
"updateTime"
jdbcType=
"TIMESTAMP"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
id, robot_wx_id, silence_duration, create_time, update_time
</sql>
<select
id=
"selectByPrimaryKey"
resultMap=
"BaseResultMap"
parameterType=
"java.lang.Integer"
>
select
<include
refid=
"Base_Column_List"
/>
from pcloud_robot_silence
where id = #{id,jdbcType=INTEGER}
</select>
<delete
id=
"deleteByPrimaryKey"
parameterType=
"java.lang.Integer"
>
delete from pcloud_robot_silence
where id = #{id,jdbcType=INTEGER}
</delete>
<insert
id=
"insert"
parameterType=
"com.pcloud.book.guide.entity.PcloudRobotSilence"
>
insert into pcloud_robot_silence (id, robot_wx_id, silence_duration,
create_time, update_time)
values (#{id,jdbcType=INTEGER}, #{robotWxId,jdbcType=VARCHAR}, #{silenceDuration,jdbcType=INTEGER},
#{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
</insert>
<insert
id=
"insertSelective"
parameterType=
"com.pcloud.book.guide.entity.PcloudRobotSilence"
>
insert into pcloud_robot_silence
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
id,
</if>
<if
test=
"robotWxId != null"
>
robot_wx_id,
</if>
<if
test=
"silenceDuration != null"
>
silence_duration,
</if>
<if
test=
"createTime != null"
>
create_time,
</if>
<if
test=
"updateTime != null"
>
update_time,
</if>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"id != null"
>
#{id,jdbcType=INTEGER},
</if>
<if
test=
"robotWxId != null"
>
#{robotWxId,jdbcType=VARCHAR},
</if>
<if
test=
"silenceDuration != null"
>
#{silenceDuration,jdbcType=INTEGER},
</if>
<if
test=
"createTime != null"
>
#{createTime,jdbcType=TIMESTAMP},
</if>
<if
test=
"updateTime != null"
>
#{updateTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update
id=
"updateByPrimaryKeySelective"
parameterType=
"com.pcloud.book.guide.entity.PcloudRobotSilence"
>
update pcloud_robot_silence
<set
>
<if
test=
"robotWxId != null"
>
robot_wx_id = #{robotWxId,jdbcType=VARCHAR},
</if>
<if
test=
"silenceDuration != null"
>
silence_duration = #{silenceDuration,jdbcType=INTEGER},
</if>
<if
test=
"createTime != null"
>
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if
test=
"updateTime != null"
>
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update
id=
"updateByPrimaryKey"
parameterType=
"com.pcloud.book.guide.entity.PcloudRobotSilence"
>
update pcloud_robot_silence
set robot_wx_id = #{robotWxId,jdbcType=VARCHAR},
silence_duration = #{silenceDuration,jdbcType=INTEGER},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
</update>
<!--查询所有平台端 引导语 缄默设置相关的机器人-->
<select
id=
"listRobots"
resultType=
"java.lang.String"
>
SELECT robot_wx_id FROM pcloud_robot_silence UNION SELECT robot_wx_id FROM pcloud_guide
</select>
<!--根据机器人wxid获取缄默时长-->
<select
id=
"getSilenceDurationByRobotWxId"
resultType=
"java.lang.Integer"
>
SELECT silence_duration FROM pcloud_robot_silence WHERE robot_wx_id = #{wxId}
</select>
<!--设置机器人缄默时长-->
<update
id=
"setSilenceDuration"
>
INSERT INTO pcloud_robot_silence (robot_wx_id,silence_duration,create_time) VALUE(#{robotWxId},#{silenceDuration},NOW())
ON DUPLICATE KEY UPDATE robot_wx_id=#{robotWxId},silence_duration=#{silenceDuration},update_time=NOW()
</update>
</mapper>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment