限制用户下单频率
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.sqx.common.utils.Result;
|
||||
import com.sqx.modules.app.dao.UserDao;
|
||||
import com.sqx.modules.app.dao.UserMoneyDao;
|
||||
import com.sqx.modules.app.dao.UserMoneyDetailsDao;
|
||||
@@ -25,6 +26,7 @@ import com.sqx.modules.pay.dao.CashOutDao;
|
||||
import com.sqx.modules.pay.dao.PayDetailsDao;
|
||||
import com.sqx.modules.pay.entity.PayDetails;
|
||||
import com.sqx.modules.pay.service.PayDetailsService;
|
||||
import com.sqx.modules.redisService.RedisService;
|
||||
import com.sqx.modules.sys.service.SysUserService;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.slf4j.Logger;
|
||||
@@ -42,7 +44,7 @@ import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ActiveProfiles("pay")
|
||||
@ActiveProfiles("test")
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
public class Tets {
|
||||
private static final Logger log = LoggerFactory.getLogger(Tets.class);
|
||||
@@ -74,6 +76,67 @@ public class Tets {
|
||||
@Autowired
|
||||
private OrdersService ordersService;
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
@Test
|
||||
public void testRedis2() {
|
||||
Result result = ordersService.insertCourseOrders(1L, 1L, 22L);
|
||||
System.out.println(result);
|
||||
|
||||
try {
|
||||
Thread.sleep(3 * 1000);
|
||||
|
||||
result = ordersService.insertCourseOrders(1L, 1L, 22L);
|
||||
System.out.println(result);
|
||||
|
||||
Thread.sleep(30 * 1000);
|
||||
|
||||
result = ordersService.insertCourseOrders(1L, 1L, 22L);
|
||||
System.out.println(result);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRedis() {
|
||||
Long userId = 1221L;
|
||||
boolean createOrder = redisService.getUserCanCreateOrder(userId);
|
||||
System.out.println(createOrder);
|
||||
if (!createOrder) {
|
||||
System.out.println("用户不能创建订单");
|
||||
} else {
|
||||
System.out.println("用户可以创建订单");
|
||||
}
|
||||
|
||||
redisService.setUserCanCreateOrder(userId);
|
||||
|
||||
createOrder = redisService.getUserCanCreateOrder(userId);
|
||||
System.out.println(createOrder);
|
||||
if (!createOrder) {
|
||||
System.out.println("用户不能创建订单");
|
||||
} else {
|
||||
System.out.println("用户可以创建订单");
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
Thread.sleep(31 * 1000);
|
||||
|
||||
createOrder = redisService.getUserCanCreateOrder(userId);
|
||||
System.out.println(createOrder);
|
||||
|
||||
if (!createOrder) {
|
||||
System.out.println("用户不能创建订单");
|
||||
} else {
|
||||
System.out.println("用户可以创建订单");
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOrder() {
|
||||
String orderNo = "70ae4e2707834bad8f06c9555dbf2528";
|
||||
|
||||
Reference in New Issue
Block a user