限制用户下单频率
This commit is contained in:
@@ -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("用户不存在");
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user