限制用户下单频率

This commit is contained in:
GYJ
2025-03-04 15:20:52 +08:00
parent 6184818182
commit 0381fd4ab5
4 changed files with 99 additions and 7 deletions

View File

@@ -30,8 +30,6 @@ import com.sqx.modules.course.entity.CourseDetails;
import com.sqx.modules.course.entity.CourseUser;
import com.sqx.modules.course.service.CourseDetailsService;
import com.sqx.modules.course.service.CourseUserService;
import com.sqx.modules.invite.service.InviteMoneyService;
import com.sqx.modules.invite.service.InviteService;
import com.sqx.modules.orders.dao.OrdersDao;
import com.sqx.modules.orders.dto.SummaryDTO;
import com.sqx.modules.orders.entity.Orders;
@@ -43,6 +41,7 @@ import com.sqx.modules.pay.entity.CashOut;
import com.sqx.modules.pay.entity.PayDetails;
import com.sqx.modules.pay.service.DyService;
import com.sqx.modules.pay.service.WxService;
import com.sqx.modules.redisService.RedisService;
import com.sqx.modules.sys.dao.SysUserDao;
import com.sqx.modules.sys.entity.SysUserEntity;
import com.sqx.modules.utils.AliPayOrderUtil;
@@ -88,10 +87,6 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
@Autowired
private UserService userService;
@Autowired
private InviteService inviteService;
@Autowired
private InviteMoneyService inviteMoneyService;
@Autowired
private DyService dyService;
@Autowired
private CourseDetailsDao courseDetailsDao;
@@ -106,6 +101,9 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
@Autowired
private PayDetailsDao payDetailsDao;
@Autowired
private RedisService redisService;
private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
@@ -262,6 +260,11 @@ public class OrdersServiceImpl extends ServiceImpl<OrdersDao, Orders> implements
@Override
public Result insertCourseOrders(Long courseId, Long courseDetailsId, Long userId) {
log.info("生成商品订单信息接口入参为:{},{}", courseId, userId);
if (!redisService.getUserCanCreateOrder(userId)) {
return Result.error("操作过于频繁,请稍后再试!");
}
redisService.setUserCanCreateOrder(userId);
UserEntity userEntity = userService.getById(userId);
if (userEntity == null) {
throw new SqxException("用户不存在");

View File

@@ -35,4 +35,16 @@ public interface RedisService {
void removeCanCashFlag(Long userId);
/**
* 设置用户上次创建订单时间
* @param userId 用户id
*/
void setUserCanCreateOrder(Long userId);
/**
* 判断用户是否可以创建订单 30s 内只能创建一次订单
* @param userId 用户id
*/
boolean getUserCanCreateOrder(Long userId);
}

View File

@@ -361,4 +361,18 @@ public class RedisServiceImpl implements RedisService {
Set<String> keys = redisTemplate.keys("createOrder:" + userId + ":*");
return keys != null && keys.size() > 22;
}
@Override
public void setUserCanCreateOrder(Long userId) {
String key = "user:canCreateOrder:" + userId;
redisTemplate.opsForValue().set(key, "1", 30, TimeUnit.SECONDS);
}
@Override
public boolean getUserCanCreateOrder(Long userId) {
String key = "user:canCreateOrder:" + userId;
String s = redisTemplate.opsForValue().get(key);
return StrUtil.isBlank(s);
}
}