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,9 @@
package com.ruoyi.cai.enums;
import lombok.Getter;
@Getter
public enum DangerEnum {
PAY_SUCCESS,
PAY_ERROR
}

View File

@@ -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),

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

View File

@@ -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){

View File

@@ -25,6 +25,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from cai_recharge_order t1
left join cai_user t2 on t1.user_id = t2.id
<where>
<if test="bo.appid != null and bo.appid != ''">
and t1.appid = #{bo.appid}
</if>
<if test="bo.mobile != null and bo.mobile != ''">
and t2.mobile = #{bo.mobile}
</if>