Compare commits

..

2 Commits

Author SHA1 Message Date
heqijun 48f03f1bbe 实现策略模块扣费校验,处理TODO
3 months ago
heqijun 4ccf5c5762 实现策略模块扣费校验
3 months ago

@ -121,10 +121,19 @@ public class CacheController {
@GetMapping("zremove/{key}/{member}/")
public long zRemove(@PathVariable String key, @PathVariable String member) {
Long l = redisClient.zRemove(key, member);
log.info("【缓存模块】zadd: key = {}member = {},编号 = {}", key, member, l);
log.info("【缓存模块】zRemove: key = {}member = {},编号 = {}", key, member, l);
return l;
}
@PostMapping("hincrby/{key}/{field}/{number}")
public Long hincrby(@PathVariable String key, @PathVariable String field, @PathVariable Long number) {
Long result = redisClient.hIncrementBy(key, field, number);
log.info("【缓存模块】hincrby: key = {}field = {}number = {}result = {}",
key, field, number, result);
return result;
}
/**
* String
*

@ -64,6 +64,9 @@ public interface BeaconCacheClient {
@GetMapping("cache/zremove/{key}/{member}/")
long zRemove(@PathVariable String key, @PathVariable String member);
@PostMapping("cache/hincrby/{key}/{field}/{number}")
Long hincrby(@PathVariable String key, @PathVariable String field, @PathVariable Long number);
/**
* String
*

@ -23,6 +23,9 @@ public class CacheConstant {
@Description("客户余额")
public static final String CLIENT_BALANCE = "client_balance:";
@Description("客户余额-余额字段名")
public static final String FIELD_BALANCE = "balance";
@Description("客户信息ip白名单ipAddress")
public static final String CLIENT_BUSINESS_IPADDRESS = "ipAddress";

@ -0,0 +1,58 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.enums.ExceptionEnums;
import com.mashibing.common.exception.StrategyException;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.feignclient.CacheClient;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import com.mashibing.strategy.utils.OutstandingFeeLimitUtil;
import com.mashibing.strategy.utils.StrategyCheckFailedUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author heqijun
* @ClassName: FeeStrategyFilter
* @Description:
* @date 2025/6/11 15:07
*/
@Slf4j
@Service(value = "fee")
public class FeeStrategyFilter implements StrategyFilter {
@Autowired
CacheClient cacheClient;
@Autowired
StrategyCheckFailedUtil strategyCheckFailedUtil;
private static final String STRATEGY_NAME = "扣费";
@Override
public void strategy(StandardSubmit submit) {
log.info("【策略模块-扣费校验】开始====================================");
Long fee = submit.getFee();
//欠费额度
Long outstandingFeeLimit = OutstandingFeeLimitUtil.getClientOutstandingFeeLimit();
String key = CacheConstant.CLIENT_BALANCE + submit.getClientId();
String filed = CacheConstant.FIELD_BALANCE;
//扣费
Long balance = cacheClient.hincrby(key, filed, -1 * fee);
log.info("【策略模块-扣费校验】本条短信扣费{},预扣费后客户余额:{},欠费额度{}", fee, balance, outstandingFeeLimit);
//超额欠费
if (balance < outstandingFeeLimit) {
log.info("【策略模块-扣费校验】超出欠费额度!!!");
//加回去
cacheClient.hincrby(key, filed, fee);
strategyCheckFailedUtil.smsSendLog(submit, STRATEGY_NAME);
strategyCheckFailedUtil.smsPushReport(submit, STRATEGY_NAME);
throw new StrategyException(ExceptionEnums.BALANCE_NOT_ENOUGH);
}
log.info("【策略模块-扣费校验】扣费成功!!!");
}
}

@ -0,0 +1,25 @@
package com.mashibing.strategy.utils;
/**
* @author heqijun
* @ClassName: OutstandingFeeLimitUtil
* @Description:
* @date 2025/6/11 15:12
*/
public class OutstandingFeeLimitUtil {
/**
*
*/
private static final long CENTI_2_YUAN = 1000L;
/**
* -10
*/
private static final long DEFAULT_OUTSTANDING_FEE_LIMIT = -10 * CENTI_2_YUAN;
public static Long getClientOutstandingFeeLimit() {
return DEFAULT_OUTSTANDING_FEE_LIMIT;
}
}
Loading…
Cancel
Save