This commit is contained in:
777
2025-10-20 14:20:46 +08:00
parent 34b6ff3a6c
commit e368d333ef
13 changed files with 194 additions and 7 deletions

View File

@@ -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());
}
}