Files
cai-server/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/DangerManger.java
2025-10-20 14:20:46 +08:00

86 lines
3.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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