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