nnnn
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
package com.ruoyi.cai.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum DangerEnum {
|
||||
PAY_SUCCESS,
|
||||
PAY_ERROR
|
||||
}
|
||||
@@ -135,6 +135,9 @@ public enum SystemConfigEnum {
|
||||
ANCHOR_JOIN_AGREEMENT("/#/agreement/anchor-join", "主播入驻协议地址",SystemConfigGroupEnum.SYSTEM),
|
||||
PAY_CUSTOM("", "支付定向测试",SystemConfigGroupEnum.SYSTEM),
|
||||
WS_SOCKET_URL("ws://localhost:8080/ws?token=%s&room_id=%s", "ws通讯地址",SystemConfigGroupEnum.SYSTEM),
|
||||
OPEN_NOTICE("1", "是否开启告警",SystemConfigGroupEnum.SYSTEM, new BooleanSystemConfigCheck()),
|
||||
PAY_ERROR_NUM_NOTICE("2", "连续调用支付失败N次,发起告警",SystemConfigGroupEnum.SYSTEM, new NumberSystemConfigCheck()),
|
||||
PAY_NOTIFY_ERROR_NUM_NOTICE("5", "连续调用N次支付,但是依旧未支付成功,发起告警",SystemConfigGroupEnum.SYSTEM, new NumberSystemConfigCheck()),
|
||||
V12_PRIVATE_KEY_PATH("/home/server/api/sign/6888803128553.pfx", "V12德商私钥路径",SystemConfigGroupEnum.SYSTEM),
|
||||
V12_PRIVATE_KEY_PASSWORD("926645", "V12德商私钥密码",SystemConfigGroupEnum.SYSTEM),
|
||||
V12_XIAOCHENGXU_ORG_ID("gh_62790d4f9c57", "V12德商小程序原始id",SystemConfigGroupEnum.SYSTEM),
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
package com.ruoyi.cai.manager;
|
||||
|
||||
import com.ruoyi.cai.enums.DangerEnum;
|
||||
import com.ruoyi.cai.enums.SystemConfigEnum;
|
||||
import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
|
||||
import com.ruoyi.system.domain.SysNotice;
|
||||
import com.ruoyi.system.mapper.SysNoticeMapper;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Component
|
||||
public class DangerManger {
|
||||
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private SystemConfigManager systemConfigManager;
|
||||
@Resource
|
||||
private SysNoticeMapper sysNoticeMapper;
|
||||
|
||||
public void resetDanger(DangerEnum dangerEnum, String businessCode) {
|
||||
Boolean openNotice = systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_NOTICE);
|
||||
if(BooleanUtils.isNotTrue(openNotice)){
|
||||
return;
|
||||
}
|
||||
String key = String.format("%s:%s",dangerEnum.name(),businessCode);
|
||||
redissonClient.getAtomicLong(key).set(0);
|
||||
}
|
||||
|
||||
public void insDanger(DangerEnum dangerEnum, String businessCode) {
|
||||
Boolean openNotice = systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_NOTICE);
|
||||
if(BooleanUtils.isNotTrue(openNotice)){
|
||||
return;
|
||||
}
|
||||
String key = String.format("%s:%s",dangerEnum.name(),businessCode);
|
||||
long num = redissonClient.getAtomicLong(key).incrementAndGet();
|
||||
if(dangerEnum == DangerEnum.PAY_ERROR){
|
||||
Long payErrorNumNotice = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.PAY_ERROR_NUM_NOTICE);
|
||||
if(num >= payErrorNumNotice && num%payErrorNumNotice == 0){
|
||||
// 发通知
|
||||
SysNotice sysNotice = new SysNotice();
|
||||
String noticeTitle = String.format("【%s】连续调用支付失败超过%s,可能出现支付通道异常,需排查!", businessCode, num);
|
||||
sysNotice.setNoticeTitle(noticeTitle);
|
||||
sysNotice.setNoticeType("3");
|
||||
sysNotice.setBusinessType(DangerEnum.PAY_ERROR.name());
|
||||
sysNotice.setNoticeContent(noticeTitle);
|
||||
sysNotice.setStatus("0");
|
||||
sysNoticeMapper.insert(sysNotice);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(dangerEnum == DangerEnum.PAY_SUCCESS){
|
||||
Long payErrorNumNotice = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.PAY_NOTIFY_ERROR_NUM_NOTICE);
|
||||
if(num >= payErrorNumNotice && num%payErrorNumNotice == 0){
|
||||
// 发通知
|
||||
SysNotice sysNotice = new SysNotice();
|
||||
String noticeTitle = String.format("【%s】连续调用支付成功%s次但是未支付成功,可能出现回调异常,需排查!", businessCode, num);
|
||||
sysNotice.setNoticeTitle(noticeTitle);
|
||||
sysNotice.setNoticeType("3");
|
||||
sysNotice.setBusinessType(DangerEnum.PAY_SUCCESS.name());
|
||||
sysNotice.setNoticeContent(noticeTitle);
|
||||
sysNotice.setStatus("0");
|
||||
sysNoticeMapper.insert(sysNotice);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void successPay(TrdPayTypeEnum typeEnum) {
|
||||
this.insDanger(DangerEnum.PAY_SUCCESS,typeEnum.name()); // 支付成功计数
|
||||
this.resetDanger(DangerEnum.PAY_ERROR,typeEnum.name()); // 清除支付失败计数
|
||||
}
|
||||
|
||||
public void errorPay(TrdPayTypeEnum typeEnum) {
|
||||
this.insDanger(DangerEnum.PAY_ERROR,typeEnum.name());
|
||||
}
|
||||
|
||||
public void notifyPay(TrdPayTypeEnum typeEnum) {
|
||||
this.resetDanger(DangerEnum.PAY_SUCCESS,typeEnum.name());
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
|
||||
import com.ruoyi.cai.domain.Account;
|
||||
import com.ruoyi.cai.domain.PayTrdConfig;
|
||||
import com.ruoyi.cai.enums.SystemConfigEnum;
|
||||
import com.ruoyi.cai.manager.DangerManger;
|
||||
import com.ruoyi.cai.manager.SystemConfigManager;
|
||||
import com.ruoyi.cai.pay.PayOrderInfoDTO;
|
||||
import com.ruoyi.cai.pay.PayReturnResp;
|
||||
@@ -68,15 +69,26 @@ public class TrdPayManager {
|
||||
private AccountService accountService;
|
||||
@Autowired
|
||||
private SystemConfigManager systemConfigManager;
|
||||
@Autowired
|
||||
private DangerManger dangerManger;
|
||||
|
||||
public PayReturnResp createOrderAliMerge(PayOrderInfoDTO payOrderInfoDTO, PayTrdConfig payTrdConfig,TrdPayTypeEnum typeEnum, boolean wx){
|
||||
PayTrdService payTrdService = getPayTrdService(typeEnum.name());
|
||||
return payTrdService.createOrderAli(payOrderInfoDTO,payTrdConfig,wx);
|
||||
try {
|
||||
PayTrdService payTrdService = getPayTrdService(typeEnum.name());
|
||||
PayReturnResp orderAli = payTrdService.createOrderAli(payOrderInfoDTO, payTrdConfig, wx);
|
||||
dangerManger.successPay(typeEnum);
|
||||
return orderAli;
|
||||
}catch (Exception e){
|
||||
dangerManger.errorPay(typeEnum);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public NotifyResp getNotifyResp(Map<String,String> sourceData,TrdPayTypeEnum typeEnum){
|
||||
PayTrdService payTrdService = getPayTrdService(typeEnum.name());
|
||||
return payTrdService.getNotifyResp(sourceData);
|
||||
NotifyResp notifyResp = payTrdService.getNotifyResp(sourceData);
|
||||
dangerManger.notifyPay(typeEnum);
|
||||
return notifyResp;
|
||||
}
|
||||
|
||||
public JSONObject queryOrder(String orderNo, PayTrdConfig payTrdConfig,TrdPayTypeEnum typeEnum){
|
||||
|
||||
Reference in New Issue
Block a user