86 lines
3.6 KiB
Java
86 lines
3.6 KiB
Java
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());
|
||
}
|
||
}
|