Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Jeepay
Commits
6930f5f6
Commit
6930f5f6
authored
Jul 27, 2021
by
terrfly
Browse files
升级rocketMQ版本, 添加新版MQ处理方式;
parent
c201d5f0
Changes
35
Hide whitespace changes
Inline
Side-by-side
jeepay-components/jeepay-components-mq/src/main/java/com/jeequan/jeepay/components/mq/vender/rocketmq/receive/PayOrderMchNotifyRocketMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.components.mq.vender.rocketmq.receive
;
import
com.jeequan.jeepay.components.mq.constant.MQVenderCS
;
import
com.jeequan.jeepay.components.mq.executor.MqThreadExecutor
;
import
com.jeequan.jeepay.components.mq.model.PayOrderMchNotifyMQ
;
import
com.jeequan.jeepay.components.mq.vender.IMQMsgReceiver
;
import
org.apache.rocketmq.spring.annotation.RocketMQMessageListener
;
import
org.apache.rocketmq.spring.core.RocketMQListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Component
;
/**
* rocketMQ消息接收器:仅在vender=rocketMQ时 && 项目实现IMQReceiver接口时 进行实例化
* 业务: 支付订单商户通知
*
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/22 17:06
*/
@Component
@ConditionalOnProperty
(
name
=
MQVenderCS
.
YML_VENDER_KEY
,
havingValue
=
MQVenderCS
.
ROCKET_MQ
)
@ConditionalOnBean
(
PayOrderMchNotifyMQ
.
IMQReceiver
.
class
)
@RocketMQMessageListener
(
topic
=
PayOrderMchNotifyMQ
.
MQ_NAME
,
consumerGroup
=
PayOrderMchNotifyMQ
.
MQ_NAME
)
public
class
PayOrderMchNotifyRocketMQReceiver
implements
IMQMsgReceiver
,
RocketMQListener
<
String
>
{
@Autowired
private
PayOrderMchNotifyMQ
.
IMQReceiver
mqReceiver
;
/** 接收 【 queue 】 类型的消息 **/
public
void
receiveMsg
(
String
msg
){
mqReceiver
.
receive
(
PayOrderMchNotifyMQ
.
parse
(
msg
));
}
@Override
@Async
(
MqThreadExecutor
.
EXECUTOR_PAYORDER_MCH_NOTIFY
)
public
void
onMessage
(
String
message
)
{
this
.
receiveMsg
(
message
);
}
}
jeepay-components/jeepay-components-mq/src/main/java/com/jeequan/jeepay/components/mq/vender/rocketmq/receive/PayOrderReissueRocketMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.components.mq.vender.rocketmq.receive
;
import
com.jeequan.jeepay.components.mq.constant.MQVenderCS
;
import
com.jeequan.jeepay.components.mq.executor.MqThreadExecutor
;
import
com.jeequan.jeepay.components.mq.model.PayOrderReissueMQ
;
import
com.jeequan.jeepay.components.mq.vender.IMQMsgReceiver
;
import
org.apache.rocketmq.spring.annotation.RocketMQMessageListener
;
import
org.apache.rocketmq.spring.core.RocketMQListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Component
;
/**
* rocketMQ消息接收器:仅在vender=rocketMQ时 && 项目实现IMQReceiver接口时 进行实例化
* 业务: 支付订单补单(一般用于没有回调的接口,比如微信的条码支付)
*
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/22 17:06
*/
@Component
@ConditionalOnProperty
(
name
=
MQVenderCS
.
YML_VENDER_KEY
,
havingValue
=
MQVenderCS
.
ROCKET_MQ
)
@ConditionalOnBean
(
PayOrderReissueMQ
.
IMQReceiver
.
class
)
@RocketMQMessageListener
(
topic
=
PayOrderReissueMQ
.
MQ_NAME
,
consumerGroup
=
PayOrderReissueMQ
.
MQ_NAME
)
public
class
PayOrderReissueRocketMQReceiver
implements
IMQMsgReceiver
,
RocketMQListener
<
String
>
{
@Autowired
private
PayOrderReissueMQ
.
IMQReceiver
mqReceiver
;
/** 接收 【 queue 】 类型的消息 **/
public
void
receiveMsg
(
String
msg
){
mqReceiver
.
receive
(
PayOrderReissueMQ
.
parse
(
msg
));
}
@Override
@Async
(
MqThreadExecutor
.
EXECUTOR_PAYORDER_MCH_NOTIFY
)
public
void
onMessage
(
String
message
)
{
this
.
receiveMsg
(
message
);
}
}
jeepay-components/jeepay-components-mq/src/main/java/com/jeequan/jeepay/components/mq/vender/rocketmq/receive/ResetAppConfigRocketMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.components.mq.vender.rocketmq.receive
;
import
com.jeequan.jeepay.components.mq.constant.MQVenderCS
;
import
com.jeequan.jeepay.components.mq.model.ResetAppConfigMQ
;
import
com.jeequan.jeepay.components.mq.vender.IMQMsgReceiver
;
import
org.apache.rocketmq.spring.annotation.MessageModel
;
import
org.apache.rocketmq.spring.annotation.RocketMQMessageListener
;
import
org.apache.rocketmq.spring.core.RocketMQListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.stereotype.Component
;
/**
* rocketMQ消息接收器:仅在vender=rocketMQ时 && 项目实现IMQReceiver接口时 进行实例化
* 业务: 更新系统配置参数
*
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/22 17:06
*/
@Component
@ConditionalOnProperty
(
name
=
MQVenderCS
.
YML_VENDER_KEY
,
havingValue
=
MQVenderCS
.
ROCKET_MQ
)
@ConditionalOnBean
(
ResetAppConfigMQ
.
IMQReceiver
.
class
)
@RocketMQMessageListener
(
topic
=
ResetAppConfigMQ
.
MQ_NAME
,
consumerGroup
=
ResetAppConfigMQ
.
MQ_NAME
,
messageModel
=
MessageModel
.
BROADCASTING
)
public
class
ResetAppConfigRocketMQReceiver
implements
IMQMsgReceiver
,
RocketMQListener
<
String
>
{
@Autowired
private
ResetAppConfigMQ
.
IMQReceiver
mqReceiver
;
/** 接收 【 MQSendTypeEnum.BROADCAST 】 广播类型的消息 **/
public
void
receiveMsg
(
String
msg
){
mqReceiver
.
receive
(
ResetAppConfigMQ
.
parse
(
msg
));
}
@Override
public
void
onMessage
(
String
message
)
{
this
.
receiveMsg
(
message
);
}
}
jeepay-components/jeepay-components-mq/src/main/java/com/jeequan/jeepay/components/mq/vender/rocketmq/receive/ResetIsvMchAppInfoRocketMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.components.mq.vender.rocketmq.receive
;
import
com.jeequan.jeepay.components.mq.constant.MQVenderCS
;
import
com.jeequan.jeepay.components.mq.model.ResetIsvMchAppInfoConfigMQ
;
import
com.jeequan.jeepay.components.mq.vender.IMQMsgReceiver
;
import
org.apache.rocketmq.spring.annotation.MessageModel
;
import
org.apache.rocketmq.spring.annotation.RocketMQMessageListener
;
import
org.apache.rocketmq.spring.core.RocketMQListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.stereotype.Component
;
/**
* rocketMQ消息接收器:仅在vender=rocketMQ时 && 项目实现IMQReceiver接口时 进行实例化
* 业务: 更新服务商/商户/商户应用配置信息
*
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/22 17:06
*/
@Component
@ConditionalOnProperty
(
name
=
MQVenderCS
.
YML_VENDER_KEY
,
havingValue
=
MQVenderCS
.
ROCKET_MQ
)
@ConditionalOnBean
(
ResetIsvMchAppInfoConfigMQ
.
IMQReceiver
.
class
)
@RocketMQMessageListener
(
topic
=
ResetIsvMchAppInfoConfigMQ
.
MQ_NAME
,
consumerGroup
=
ResetIsvMchAppInfoConfigMQ
.
MQ_NAME
,
messageModel
=
MessageModel
.
BROADCASTING
)
public
class
ResetIsvMchAppInfoRocketMQReceiver
implements
IMQMsgReceiver
,
RocketMQListener
<
String
>
{
@Autowired
private
ResetIsvMchAppInfoConfigMQ
.
IMQReceiver
mqReceiver
;
/** 接收 【 MQSendTypeEnum.BROADCAST 】 广播类型的消息 **/
public
void
receiveMsg
(
String
msg
){
mqReceiver
.
receive
(
ResetIsvMchAppInfoConfigMQ
.
parse
(
msg
));
}
@Override
public
void
onMessage
(
String
message
)
{
this
.
receiveMsg
(
message
);
}
}
jeepay-manager/src/main/java/com/jeequan/jeepay/mgr/mq/ResetAppConfigMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.mgr.mq
;
import
com.jeequan.jeepay.components.mq.model.ResetAppConfigMQ
;
import
com.jeequan.jeepay.service.impl.SysConfigService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* 接收MQ消息
* 业务: 更新系统配置参数
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/27 9:23
*/
@Slf4j
@Component
public
class
ResetAppConfigMQReceiver
implements
ResetAppConfigMQ
.
IMQReceiver
{
@Autowired
private
SysConfigService
sysConfigService
;
@Override
public
void
receive
(
ResetAppConfigMQ
.
MsgPayload
payload
)
{
log
.
info
(
"成功接收更新系统配置的订阅通知, msg={}"
,
payload
);
sysConfigService
.
initDBConfig
(
payload
.
getGroupKey
());
log
.
info
(
"系统配置静态属性已重置"
);
}
}
jeepay-merchant/pom.xml
View file @
6930f5f6
...
...
@@ -30,6 +30,12 @@
<artifactId>
jeepay-components-oss
</artifactId>
</dependency>
<!-- 依赖[ mq ]包 -->
<dependency>
<groupId>
com.jeequan
</groupId>
<artifactId>
jeepay-components-mq
</artifactId>
</dependency>
<!-- 依赖 sping-boot-web -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
...
...
jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/mq/CleanMchLoginAuthCacheMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.mch.mq
;
import
com.jeequan.jeepay.components.mq.model.CleanMchLoginAuthCacheMQ
;
import
com.jeequan.jeepay.core.cache.RedisUtil
;
import
com.jeequan.jeepay.core.constants.CS
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
import
java.util.Collection
;
import
java.util.List
;
/**
* 接收MQ消息
* 业务: 清除商户登录信息
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/27 9:23
*/
@Slf4j
@Component
public
class
CleanMchLoginAuthCacheMQReceiver
implements
CleanMchLoginAuthCacheMQ
.
IMQReceiver
{
@Override
public
void
receive
(
CleanMchLoginAuthCacheMQ
.
MsgPayload
payload
)
{
log
.
info
(
"成功接收删除商户用户登录的订阅通知, msg={}"
,
payload
);
// 字符串转List<Long>
List
<
Long
>
userIdList
=
payload
.
getUserIdList
();
// 删除redis用户缓存
if
(
userIdList
==
null
||
userIdList
.
isEmpty
()){
log
.
info
(
"用户ID为空"
);
return
;
}
for
(
Long
sysUserId
:
userIdList
)
{
Collection
<
String
>
cacheKeyList
=
RedisUtil
.
keys
(
CS
.
getCacheKeyToken
(
sysUserId
,
"*"
));
if
(
cacheKeyList
==
null
||
cacheKeyList
.
isEmpty
()){
continue
;
}
for
(
String
cacheKey
:
cacheKeyList
)
{
// 删除用户Redis信息
RedisUtil
.
del
(
cacheKey
);
continue
;
}
}
log
.
info
(
"无权限登录用户信息已清除"
);
}
}
jeepay-merchant/src/main/java/com/jeequan/jeepay/mch/mq/ResetAppConfigMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.mch.mq
;
import
com.jeequan.jeepay.components.mq.model.ResetAppConfigMQ
;
import
com.jeequan.jeepay.service.impl.SysConfigService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* 接收MQ消息
* 业务: 更新系统配置参数
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/27 9:23
*/
@Slf4j
@Component
public
class
ResetAppConfigMQReceiver
implements
ResetAppConfigMQ
.
IMQReceiver
{
@Autowired
private
SysConfigService
sysConfigService
;
@Override
public
void
receive
(
ResetAppConfigMQ
.
MsgPayload
payload
)
{
log
.
info
(
"成功接收更新系统配置的订阅通知, msg={}"
,
payload
);
sysConfigService
.
initDBConfig
(
payload
.
getGroupKey
());
log
.
info
(
"系统配置静态属性已重置"
);
}
}
jeepay-payment/pom.xml
View file @
6930f5f6
...
...
@@ -94,7 +94,6 @@
<dependency>
<groupId>
org.apache.rocketmq
</groupId>
<artifactId>
rocketmq-spring-boot-starter
</artifactId>
<version>
${rocketmq.spring.boot.starter.version}
</version>
</dependency>
<!--wx_pay https://github.com/wechat-group/WxJava -->
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/ctrl/payorder/UnifiedOrderController.java
View file @
6930f5f6
...
...
@@ -15,6 +15,9 @@
*/
package
com.jeequan.jeepay.pay.ctrl.payorder
;
import
com.jeequan.jeepay.components.mq.model.PayOrderMchNotifyMQ
;
import
com.jeequan.jeepay.components.mq.model.ResetAppConfigMQ
;
import
com.jeequan.jeepay.components.mq.vender.IMQSender
;
import
com.jeequan.jeepay.core.constants.CS
;
import
com.jeequan.jeepay.core.entity.PayOrder
;
import
com.jeequan.jeepay.core.entity.PayWay
;
...
...
@@ -46,12 +49,33 @@ public class UnifiedOrderController extends AbstractPayOrderController {
@Autowired
private
PayWayService
payWayService
;
@Autowired
private
ConfigContextService
configContextService
;
@Autowired
private
IMQSender
mqSender
;
/**
* 统一下单接口
* **/
@PostMapping
(
"/api/pay/unifiedOrder"
)
public
ApiRes
unifiedOrder
(){
if
(
true
){
// imqSender.send(PayOrderMchNotifyMQ.build("T00001"));
mqSender
.
send
(
ResetAppConfigMQ
.
build
(),
19
);
mqSender
.
send
(
PayOrderMchNotifyMQ
.
build
(
"123"
));
mqSender
.
send
(
ResetAppConfigMQ
.
build
(),
20
);
return
null
;
}
//获取参数 & 验签
UnifiedOrderRQ
rq
=
getRQByWithMchSign
(
UnifiedOrderRQ
.
class
);
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/mq/PayOrderMchNotifyMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.pay.mq
;
import
cn.hutool.http.HttpException
;
import
cn.hutool.http.HttpUtil
;
import
com.jeequan.jeepay.components.mq.model.PayOrderMchNotifyMQ
;
import
com.jeequan.jeepay.components.mq.vender.IMQSender
;
import
com.jeequan.jeepay.core.entity.MchNotifyRecord
;
import
com.jeequan.jeepay.core.mq.MqCommonService
;
import
com.jeequan.jeepay.service.impl.MchNotifyRecordService
;
import
com.jeequan.jeepay.service.impl.PayOrderService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* 接收MQ消息
* 业务: 支付订单商户通知
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/27 9:23
*/
@Slf4j
@Component
public
class
PayOrderMchNotifyMQReceiver
implements
PayOrderMchNotifyMQ
.
IMQReceiver
{
@Autowired
private
PayOrderService
payOrderService
;
@Autowired
private
MchNotifyRecordService
mchNotifyRecordService
;
@Autowired
private
IMQSender
mqSender
;
@Override
public
void
receive
(
PayOrderMchNotifyMQ
.
MsgPayload
payload
)
{
try
{
log
.
info
(
"接收商户通知MQ, msg={}"
,
payload
.
toString
());
Long
notifyId
=
payload
.
getNotifyId
();
MchNotifyRecord
record
=
mchNotifyRecordService
.
getById
(
notifyId
);
if
(
record
==
null
||
record
.
getState
()
!=
MchNotifyRecord
.
STATE_ING
){
log
.
info
(
"查询通知记录不存在或状态不是通知中"
);
return
;
}
if
(
record
.
getNotifyCount
()
>=
record
.
getNotifyCountLimit
()
){
log
.
info
(
"已达到最大发送次数"
);
return
;
}
//1. (发送结果最多6次)
Integer
currentCount
=
record
.
getNotifyCount
()
+
1
;
String
notifyUrl
=
record
.
getNotifyUrl
();
String
res
=
""
;
try
{
res
=
HttpUtil
.
createPost
(
notifyUrl
).
timeout
(
20000
).
execute
().
body
();
}
catch
(
HttpException
e
)
{
log
.
error
(
"http error"
,
e
);
}
if
(
currentCount
==
1
){
//第一次通知: 更新为已通知
payOrderService
.
updateNotifySent
(
record
.
getOrderId
());
}
//通知成功
if
(
"SUCCESS"
.
equalsIgnoreCase
(
res
)){
mchNotifyRecordService
.
updateNotifyResult
(
notifyId
,
MchNotifyRecord
.
STATE_SUCCESS
,
res
);
return
;
}
//通知次数 >= 最大通知次数时, 更新响应结果为异常, 不在继续延迟发送消息
if
(
currentCount
>=
record
.
getNotifyCountLimit
()
){
mchNotifyRecordService
.
updateNotifyResult
(
notifyId
,
MchNotifyRecord
.
STATE_FAIL
,
res
);
return
;
}
// 继续发送MQ 延迟发送
mchNotifyRecordService
.
updateNotifyResult
(
notifyId
,
MchNotifyRecord
.
STATE_ING
,
res
);
// 通知延时次数
// 1 2 3 4 5 6
// 0 30 60 90 120 150
mqSender
.
send
(
PayOrderMchNotifyMQ
.
build
(
notifyId
),
currentCount
*
30
*
1000
);
return
;
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
return
;
}
}
}
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/mq/PayOrderReissueMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.pay.mq
;
import
com.jeequan.jeepay.components.mq.model.PayOrderReissueMQ
;
import
com.jeequan.jeepay.components.mq.vender.IMQSender
;
import
com.jeequan.jeepay.core.entity.PayOrder
;
import
com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg
;
import
com.jeequan.jeepay.pay.service.ChannelOrderReissueService
;
import
com.jeequan.jeepay.service.impl.PayOrderService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* 接收MQ消息
* 业务: 支付订单补单(一般用于没有回调的接口,比如微信的条码支付)
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/27 9:23
*/
@Slf4j
@Component
public
class
PayOrderReissueMQReceiver
implements
PayOrderReissueMQ
.
IMQReceiver
{
@Autowired
private
IMQSender
mqSender
;
@Autowired
private
PayOrderService
payOrderService
;
@Autowired
private
ChannelOrderReissueService
channelOrderReissueService
;
@Override
public
void
receive
(
PayOrderReissueMQ
.
MsgPayload
payload
)
{
try
{
String
payOrderId
=
payload
.
getPayOrderId
();
int
currentCount
=
payload
.
getCount
();
log
.
info
(
"接收轮询查单通知MQ, payOrderId={}, count={}"
,
payOrderId
,
currentCount
);
currentCount
++
;
PayOrder
payOrder
=
payOrderService
.
getById
(
payOrderId
);
if
(
payOrder
==
null
)
{
log
.
warn
(
"查询支付订单为空,payOrderId={}"
,
payOrderId
);
return
;
}
if
(
payOrder
.
getState
()
!=
PayOrder
.
STATE_ING
)
{
log
.
warn
(
"订单状态不是支付中,不需查询渠道.payOrderId={}"
,
payOrderId
);
return
;
}
if
(
payOrder
==
null
)
return
;
ChannelRetMsg
channelRetMsg
=
channelOrderReissueService
.
processPayOrder
(
payOrder
);
//返回null 可能为接口报错等, 需要再次轮询
if
(
channelRetMsg
==
null
||
channelRetMsg
.
getChannelState
()
==
null
||
channelRetMsg
.
getChannelState
().
equals
(
ChannelRetMsg
.
ChannelState
.
WAITING
)){
//最多查询6次
if
(
currentCount
<=
6
){
mqSender
.
send
(
PayOrderReissueMQ
.
build
(
payOrderId
,
currentCount
),
5
);
//延迟5s再次查询
}
else
{
//TODO 调用【撤销订单】接口
}
}
else
{
//其他状态, 不需要再次轮询。
}
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
return
;
}
}
}
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/mq/ResetAppConfigMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.pay.mq
;
import
com.jeequan.jeepay.components.mq.model.ResetAppConfigMQ
;
import
com.jeequan.jeepay.service.impl.SysConfigService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* 接收MQ消息
* 业务: 更新系统配置参数
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/27 9:23
*/
@Slf4j
@Component
public
class
ResetAppConfigMQReceiver
implements
ResetAppConfigMQ
.
IMQReceiver
{
@Autowired
private
SysConfigService
sysConfigService
;
@Override
public
void
receive
(
ResetAppConfigMQ
.
MsgPayload
payload
)
{
log
.
info
(
"成功接收更新系统配置的订阅通知, msg={}"
,
payload
);
sysConfigService
.
initDBConfig
(
payload
.
getGroupKey
());
log
.
info
(
"系统配置静态属性已重置"
);
}
}
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/mq/ResetIsvMchAppInfoMQReceiver.java
0 → 100644
View file @
6930f5f6
/*
* Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com).
* <p>
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.gnu.org/licenses/lgpl.html
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.jeequan.jeepay.pay.mq
;
import
com.jeequan.jeepay.components.mq.model.ResetIsvMchAppInfoConfigMQ
;
import
com.jeequan.jeepay.pay.service.ConfigContextService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* 接收MQ消息
* 业务: 更新服务商/商户/商户应用配置信息;
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/7/27 9:23
*/
@Slf4j
@Component
public
class
ResetIsvMchAppInfoMQReceiver
implements
ResetIsvMchAppInfoConfigMQ
.
IMQReceiver
{
@Autowired
private
ConfigContextService
configContextService
;
@Override
public
void
receive
(
ResetIsvMchAppInfoConfigMQ
.
MsgPayload
payload
)
{
if
(
payload
.
getResetType
()
==
ResetIsvMchAppInfoConfigMQ
.
MsgPayload
.
RESET_TYPE
.
ISV_INFO
){
this
.
modifyIsvInfo
(
payload
.
getIsvNo
());
}
else
if
(
payload
.
getResetType
()
==
ResetIsvMchAppInfoConfigMQ
.
MsgPayload
.
RESET_TYPE
.
MCH_INFO
){
this
.
modifyMchInfo
(
payload
.
getMchNo
());
}
else
if
(
payload
.
getResetType
()
==
ResetIsvMchAppInfoConfigMQ
.
MsgPayload
.
RESET_TYPE
.
MCH_APP
){
this
.
modifyMchApp
(
payload
.
getMchNo
(),
payload
.
getAppId
());
}
}
/** 接收 [商户配置信息] 的消息 **/
private
void
modifyMchInfo
(
String
mchNo
)
{
log
.
info
(
"成功接收 [商户配置信息] 的消息, msg={}"
,
mchNo
);
configContextService
.
initMchInfoConfigContext
(
mchNo
);
log
.
info
(
" [商户配置信息] 已重置"
);
}
/** 接收 [商户应用支付参数配置信息] 的消息 **/
private
void
modifyMchApp
(
String
mchNo
,
String
appId
)
{
log
.
info
(
"成功接收 [商户应用支付参数配置信息] 的消息, mchNo={}, appId={}"
,
mchNo
,
appId
);
configContextService
.
initMchAppConfigContext
(
mchNo
,
appId
);
log
.
info
(
" [商户应用支付参数配置信息] 已重置"
);
}
/** 重置ISV信息 **/
private
void
modifyIsvInfo
(
String
isvNo
)
{
log
.
info
(
"成功接收 [ISV信息] 重置, msg={}"
,
isvNo
);
configContextService
.
initIsvConfigContext
(
isvNo
);
log
.
info
(
"[ISV信息] 已重置"
);
}
}
pom.xml
View file @
6930f5f6
...
...
@@ -49,7 +49,7 @@
<spring.security.version>
5.4.7
</spring.security.version>
<!-- 用于core的scope依赖 -->
<jjwt.version>
0.9.1
</jjwt.version>
<binarywang.weixin.java.version>
4.1.0
</binarywang.weixin.java.version>
<rocketmq.spring.boot.starter.version>
2.
0.3
</rocketmq.spring.boot.starter.version>
<rocketmq.spring.boot.starter.version>
2.
2.0
</rocketmq.spring.boot.starter.version>
</properties>
...
...
@@ -160,6 +160,13 @@
<version>
3.13.0
</version>
</dependency>
<!-- 添加对rocketMQ的支持 -->
<dependency>
<groupId>
org.apache.rocketmq
</groupId>
<artifactId>
rocketmq-spring-boot-starter
</artifactId>
<version>
${rocketmq.spring.boot.starter.version}
</version>
</dependency>
</dependencies>
</dependencyManagement>
...
...
Prev
1
2
Next
Write
Preview
Supports
Markdown
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