diff --git a/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java b/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java index 5cfd0549..ac2b9ffa 100644 --- a/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java +++ b/src/main/java/com/sqx/modules/job/task/TempOrdersTask.java @@ -8,14 +8,8 @@ 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.sqx.common.utils.DateUtils; -import com.sqx.modules.app.entity.InviteAchievement; -import com.sqx.modules.app.entity.UserEntity; -import com.sqx.modules.app.entity.UserMoney; -import com.sqx.modules.app.entity.UserMoneyDetails; -import com.sqx.modules.app.service.InviteAchievementService; -import com.sqx.modules.app.service.UserMoneyDetailsService; -import com.sqx.modules.app.service.UserMoneyService; -import com.sqx.modules.app.service.UserService; +import com.sqx.modules.app.entity.*; +import com.sqx.modules.app.service.*; import com.sqx.modules.common.service.CommonInfoService; import com.sqx.modules.complet.entity.CompletAward; import com.sqx.modules.complet.service.CompletAwardService; @@ -47,6 +41,8 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; @Component @@ -83,13 +79,15 @@ public class TempOrdersTask { private final InviteAchievementService inviteAchievementService; private final CourseService courseService; private final SysUserMoneyDetailsService sysUserMoneyDetailsService; + private final UserInfoService userInfoService; private Logger logger = LoggerFactory.getLogger(getClass()); - public TempOrdersTask(InviteAchievementService inviteAchievementService, CourseService courseService, SysUserMoneyDetailsService sysUserMoneyDetailsService) { + public TempOrdersTask(InviteAchievementService inviteAchievementService, CourseService courseService, SysUserMoneyDetailsService sysUserMoneyDetailsService, UserInfoService userInfoService) { this.inviteAchievementService = inviteAchievementService; this.courseService = courseService; this.sysUserMoneyDetailsService = sysUserMoneyDetailsService; + this.userInfoService = userInfoService; } @Scheduled(cron = "0 0/10 * * * ? ") @@ -255,11 +253,17 @@ public class TempOrdersTask { } } - int count = inviteAchievementService.count( - new LambdaQueryWrapper() - .eq(InviteAchievement::getUserId, sourceUser.getUserId()) - .eq(InviteAchievement::getState, 1)); - logger.info("邀请人员: {}", count); +// int count = inviteAchievementService.count( +// new LambdaQueryWrapper() +// .eq(InviteAchievement::getUserId, sourceUser.getUserId()) +// .eq(InviteAchievement::getState, 1)); + Set byUserIdList = inviteAchievementService.list(new LambdaQueryWrapper().eq(InviteAchievement::getUserId, sourceUser.getUserId()) + .eq(InviteAchievement::getState, 1).select(InviteAchievement::getTargetUserId)).stream().map(InviteAchievement::getTargetUserId).collect(Collectors.toSet()); + int count = 0; + if (!byUserIdList.isEmpty()) { + count = userInfoService.count(new LambdaQueryWrapper().in(UserInfo::getUserId, byUserIdList).isNotNull(UserInfo::getAccountNo)); + } + logger.info("邀请达标人员: {}", count); //count 邀请的已达标人数 for (CompletAward completAward : completAwardService.list(new QueryWrapper().eq("invite_count", count).eq("status", 1))) { QueryWrapper moneyDetailsQuery = new QueryWrapper<>(); diff --git a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java index cf6ca044..62e0bd9e 100644 --- a/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java +++ b/src/main/java/com/sqx/modules/pay/controller/app/WuyouController.java @@ -36,6 +36,7 @@ import com.sqx.modules.pay.wuyou.BaseResp; import com.sqx.modules.pay.wuyou.Encrypt; import com.sqx.modules.pay.wuyou.NotifyDto; import com.sqx.modules.pay.wuyou.WuyouPay; +import com.sqx.modules.redisService.RedisService; import com.sqx.modules.sys.entity.SysUserEntity; import com.sqx.modules.sys.service.SysUserService; import com.sqx.modules.utils.AliPayOrderUtil; @@ -74,12 +75,14 @@ public class WuyouController { private final CashOutDao cashOutDao; private final WuyouPay wuyouPay; private final TempOrdersTask ordersTask; + private final UserService userService; + private final RedisService redisService; @Resource private WuyouCallbackService wuyouCallbackService; WuyouController(OrdersService ordersService, PayDetailsDao payDetailsDao, CashOutDao cashOutDao, UserMoneyService userMoneyService, UserMoneyDetailsService userMoneyDetailsService, TempOrdersTask ordersTask, - WuyouPay wuyouPay) { + WuyouPay wuyouPay, UserService userService, RedisService redisService) { this.ordersService = ordersService; this.payDetailsDao = payDetailsDao; this.cashOutDao = cashOutDao; @@ -87,6 +90,8 @@ public class WuyouController { this.userMoneyDetailsService = userMoneyDetailsService; this.wuyouPay = wuyouPay; this.ordersTask = ordersTask; + this.userService = userService; + this.redisService = redisService; } @Debounce(interval = 1000, value = "#orderId") @@ -101,6 +106,9 @@ public class WuyouController { if (order.getStatus() != 0) { return Result.error("订单已支付"); } + if (redisService.setCreateOrderFlagAndCheckLimit(order.getUserId(), orderId)) { + userService.addBlackUser(order.getUserId(), "一分钟频繁下单超12次"); + } PayDetails payDetails = payDetailsDao.selectByOrderId(order.getOrdersNo()); if (payDetails == null) { diff --git a/src/main/java/com/sqx/modules/pay/service/impl/WuyouCallbackServiceImpl.java b/src/main/java/com/sqx/modules/pay/service/impl/WuyouCallbackServiceImpl.java index b3c22b7d..576a9ac8 100644 --- a/src/main/java/com/sqx/modules/pay/service/impl/WuyouCallbackServiceImpl.java +++ b/src/main/java/com/sqx/modules/pay/service/impl/WuyouCallbackServiceImpl.java @@ -75,7 +75,7 @@ public class WuyouCallbackServiceImpl implements WuyouCallbackService { @Transactional public int executeExtractCallback(CashOut cashOut, int status, String reason) { if (StringUtils.isNotBlank(reason) && reason.contains("已驳回")) { - reason = "提现失败,请检查支付宝账号与收款人姓名后重试。"; + reason = "提现失败,请检查收款账号与收款人姓名后重试。"; } BigDecimal money = new BigDecimal(cashOut.getMoney()); if (status == 1) { diff --git a/src/main/java/com/sqx/modules/redisService/RedisService.java b/src/main/java/com/sqx/modules/redisService/RedisService.java index 8b33101f..f486f5ab 100644 --- a/src/main/java/com/sqx/modules/redisService/RedisService.java +++ b/src/main/java/com/sqx/modules/redisService/RedisService.java @@ -30,4 +30,6 @@ public interface RedisService { void setCanCashFlag(Long userId, Long id); boolean isCanCash(Long userId); + + boolean setCreateOrderFlagAndCheckLimit(Long userId, Long orderId); } diff --git a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java index 2f551810..427c1f7e 100644 --- a/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java +++ b/src/main/java/com/sqx/modules/redisService/impl/RedisServiceImpl.java @@ -342,4 +342,13 @@ public class RedisServiceImpl implements RedisService { String s = redisUtils.get(key); return StrUtil.isNotBlank(s); } + + @Override + public boolean setCreateOrderFlagAndCheckLimit(Long userId, Long orderId) { + String key = "createOrder:" + userId; + redisTemplate.opsForSet().add(key, orderId.toString()); + redisUtils.expire(key, 60); + Set members = redisTemplate.opsForSet().members(key); + return members != null && members.size() > 12; + } } diff --git a/src/main/java/com/sqx/nsqChannel/NsqConfig.java b/src/main/java/com/sqx/nsqChannel/NsqConfig.java index cfcea39e..96f84694 100644 --- a/src/main/java/com/sqx/nsqChannel/NsqConfig.java +++ b/src/main/java/com/sqx/nsqChannel/NsqConfig.java @@ -9,21 +9,21 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; -@Service +//@Service @Slf4j public class NsqConfig { -// /** -// * 端口号 -// */ -// @Value("${nsq.port}") -// private int port; -// -// @Value("${nsq.address}") -// private String address; -// + /** + * 端口号 + */ + @Value("${nsq.port.consumer}") + private int port; + + @Value("${nsq.address}") + private String address; + // @PostConstruct -// public void startNSQChannel() { -// new NSQConsumers(address, port, "test", "ch1", new Print2MessageHandlerAdapter()); -// new NSQConsumers(address, port, "test", "ch2", new PrintMessageHandlerAdapter()); -// } + public void startNSQChannel() { + new NSQConsumers(address, port, "test", "ch1", new Print2MessageHandlerAdapter()); + new NSQConsumers(address, port, "test", "ch2", new PrintMessageHandlerAdapter()); + } } diff --git a/src/main/java/com/sqx/nsqChannel/config/NsqProduce.java b/src/main/java/com/sqx/nsqChannel/config/NsqProduce.java new file mode 100644 index 00000000..fbd68b8a --- /dev/null +++ b/src/main/java/com/sqx/nsqChannel/config/NsqProduce.java @@ -0,0 +1,53 @@ +package com.sqx.nsqChannel.config; + +import com.github.brainlag.nsq.NSQProducer; +import com.github.brainlag.nsq.exceptions.NSQException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeoutException; + +@Slf4j +//@Component +public class NsqProduce { + @Value("${nsq.port.produce}") + private int port; + + @Value("${nsq.address}") + private String address; + + + private NSQProducer producer; + private static boolean is_start = false; + private static final byte[] LOCK = new byte[0]; + + public NsqProduce() { + producer = new NSQProducer(); + producer.addAddress(address, port).start(); + is_start = true; + } + + public NSQProducer getProducer() { + if (!is_start) { + log.info("========================NSQProduce no start===================="); + } + if (producer == null) { + synchronized (LOCK) { + if (producer == null) { + producer = new NSQProducer(); + producer.addAddress(address, port).start(); + } + } + } + return producer; + } + + public void sendMsgToTestTopic(String topic,String msg) { + try { + this.getProducer().produce(topic, msg.getBytes()); + } catch (NSQException | TimeoutException e) { + log.error(e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sqx/nsqChannel/enums/TopicEnums.java b/src/main/java/com/sqx/nsqChannel/enums/TopicEnums.java new file mode 100644 index 00000000..177ebb9a --- /dev/null +++ b/src/main/java/com/sqx/nsqChannel/enums/TopicEnums.java @@ -0,0 +1,4 @@ +package com.sqx.nsqChannel.enums; + +public enum TopicEnums { +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a98e79b4..c595b9b9 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -10,7 +10,9 @@ server: nsq: address: 47.122.26.160 - port: 4161 + port: + produce: 4150 + consumer: 4161 # 数据源的一些配置 driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/src/main/resources/application-pay.yml b/src/main/resources/application-pay.yml index f1896cb2..2dc7a0d6 100644 --- a/src/main/resources/application-pay.yml +++ b/src/main/resources/application-pay.yml @@ -11,7 +11,9 @@ server: nsq: address: 47.122.26.160 - port: 4161 + port: + produce: 4150 + consumer: 4161 # 数据源的一些配置 driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index e45f1af2..43a1131b 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -10,7 +10,9 @@ server: nsq: address: 127.0.0.1 - port: 4161 + port: + produce: 4150 + consumer: 4161 # 数据源的一些配置 driver-class-name: com.mysql.cj.jdbc.Driver