| | |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Result addPrizeNum(AddPrizeNumForm addPrizeNumForm) { |
| | | //指定活动给指定活动添加没指定活动给默认活动添加 |
| | | String prizeActivityId = addPrizeNumForm.getPrizeActivityId(); |
| | |
| | | addPrizeNumForm.setUserId(currentUser.getId()); |
| | | |
| | | } |
| | | String userId = addPrizeNumForm.getUserId(); |
| | | RLock lock = redissonClient.getLock(PRIZE_ADD_NUM + userId); |
| | | try { |
| | | |
| | | lock.lock(); |
| | | PrizeActivity activity = prizeActivityService.getById(addPrizeNumForm.getPrizeActivityId()); |
| | | if (activity == null) { |
| | | throw new ServiceException("当前活动不存在"); |
| | |
| | | throw new ServiceException("当前活动已结束"); |
| | | } |
| | | Integer maxPrize = activity.getMaxPrize(); |
| | | String userId = addPrizeNumForm.getUserId(); |
| | | List<PrizeNumber> prizeNumberList = getPrizeNumberList(activity.getId(), userId); |
| | | if (prizeNumberList.size() >= maxPrize) { |
| | | throw new ServiceException("抽奖次数已达到上限了"); |
| | |
| | | } |
| | | prizeNumberService.saveBatch(needAdd); |
| | | return Result.ok().data(0); |
| | | } finally { |
| | | TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { |
| | | @Override |
| | | public void afterCommit() { |
| | | if (lock.isHeldByCurrentThread()) { |
| | | lock.unlock(); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void afterCompletion(int status) { |
| | | if (lock.isHeldByCurrentThread()) { |
| | | lock.unlock(); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | public AddPrizeRule getAddPrizeRule(String ruleCode) { |
| | | LambdaQueryWrapper<AddPrizeRule> one = Wrappers.<AddPrizeRule>lambdaQuery().eq(AddPrizeRule::getRuleCode, ruleCode); |
| | | return addPrizeRuleService.getOne(one); |