Browse Source

feature1.0.0-img: 添加分布式锁

master
penny 4 years ago
parent
commit
7ce488193c
  1. 9
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java
  2. 21
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java
  3. 2
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml

9
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java

@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bnyer.common.redis.service.RedisService; import com.bnyer.common.redis.service.RedisService;
import com.bnyer.common.redis.service.RedissonService;
import com.bnyer.img.domain.CreatorProfit; import com.bnyer.img.domain.CreatorProfit;
import com.bnyer.img.domain.InviteLog; import com.bnyer.img.domain.InviteLog;
import com.bnyer.img.dto.CreatorProfitPageDto; import com.bnyer.img.dto.CreatorProfitPageDto;
@ -40,6 +41,9 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
@Autowired @Autowired
private InviteLogMapper inviteLogMapper; private InviteLogMapper inviteLogMapper;
@Autowired
private RedissonService redissonService;
@Override @Override
public boolean checkCreatorProfitExist(String mark) { public boolean checkCreatorProfitExist(String mark) {
CreatorProfit creatorProfit = creatorProfitMapper.checkCreatorProfitExist(mark); CreatorProfit creatorProfit = creatorProfitMapper.checkCreatorProfitExist(mark);
@ -56,7 +60,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
long times = System.currentTimeMillis(); long times = System.currentTimeMillis();
String date = format.format(times); String date = format.format(times);
String mark = creatorProfit.getCreatorId()+creatorProfit.getImgId()+creatorProfit.getAppType()+creatorProfit.getPlatform()+ String mark = creatorProfit.getCreatorId().toString() + creatorProfit.getImgId().toString() + creatorProfit.getAppType() + creatorProfit.getPlatform() +
"0" + date.replace("-", ""); "0" + date.replace("-", "");
//缓存中下载总数+1 //缓存中下载总数+1
tiktokImgService.writeDownloadTotalNum(creatorProfit.getAppType(), creatorProfit.getPlatform()); tiktokImgService.writeDownloadTotalNum(creatorProfit.getAppType(), creatorProfit.getPlatform());
@ -110,7 +114,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
List<String> updateList = new ArrayList<>(); List<String> updateList = new ArrayList<>();
List<CreatorProfit> insertList = new ArrayList<>(); List<CreatorProfit> insertList = new ArrayList<>();
for (InviteLog inviteLog : inviteLogs) { for (InviteLog inviteLog : inviteLogs) {
String mark = inviteLog.getCreatorId()+creatorProfit.getImgId()+creatorProfit.getAppType()+creatorProfit.getPlatform()+ String mark = inviteLog.getCreatorId().toString() + creatorProfit.getImgId().toString() + creatorProfit.getAppType() + creatorProfit.getPlatform() +
"1" + date.replace("-", ""); "1" + date.replace("-", "");
//检查收益表是否存在邀请记录,存在则记录更新邀请者Id //检查收益表是否存在邀请记录,存在则记录更新邀请者Id
boolean b = this.checkCreatorProfitExist(mark); boolean b = this.checkCreatorProfitExist(mark);
@ -187,7 +191,6 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int changeIsShow(Long id, String status) { public int changeIsShow(Long id, String status) {

21
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java

@ -1,5 +1,6 @@
package com.bnyer.img.service.impl; package com.bnyer.img.service.impl;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.StringUtils;
@ -110,7 +111,7 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
//获取分布式锁 //获取分布式锁
RLock lock = redissonService.getRLock(RedisKeyConstant.VERIFY_PROFIT_LOCK_KEY + params.getId()); RLock lock = redissonService.getRLock(RedisKeyConstant.VERIFY_PROFIT_LOCK_KEY + params.getId());
try{ try{
if(lock.tryLock(0L, 30L, TimeUnit.SECONDS)){ if(lock.tryLock(2L, 10L, TimeUnit.SECONDS)){
log.info("锁获取成功,开始执行审核收益操作"); log.info("锁获取成功,开始执行审核收益操作");
//审核通过计算收益 //审核通过计算收益
//昨日总收益的80%作为广告收益 //昨日总收益的80%作为广告收益
@ -171,6 +172,7 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
} }
}catch (Exception e){ }catch (Exception e){
log.error("审核收益单失败!错误原因为【{}】",e.getMessage()); log.error("审核收益单失败!错误原因为【{}】",e.getMessage());
throw new ServiceException("系统繁忙,请勿重复操作!");
}finally { }finally {
//释放锁 //释放锁
if(lock.isHeldByCurrentThread()){ if(lock.isHeldByCurrentThread()){
@ -196,6 +198,11 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int transInfoWallet() { public int transInfoWallet() {
//获取分布式锁
RLock lock = redissonService.getRLock(RedisKeyConstant.VERIFY_PROFIT_LOCK_KEY + RandomUtil.randomString(8));
try{
if(lock.tryLock(2L, 10L, TimeUnit.SECONDS)){
log.info("锁获取成功,开始执行转入钱包操作");
//查询所有审核通过的艺术家 //查询所有审核通过的艺术家
List<Creator> creators = creatorService.queryPassList(); List<Creator> creators = creatorService.queryPassList();
//查询审所有核状态为已到账,且已确认且类型不为会员的收益 //查询审所有核状态为已到账,且已确认且类型不为会员的收益
@ -226,5 +233,17 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
}else{ }else{
return 0; return 0;
} }
}else{
throw new ServiceException("系统繁忙,请稍候重试!");
}
}catch (Exception e){
log.error("转入钱包失败!错误原因为【{}】",e.getMessage());
throw new ServiceException("系统繁忙,请勿重复操作!");
}finally {
if(lock.isHeldByCurrentThread()){
lock.unlock();
log.info("转入钱包操作执行完毕,释放锁成功!");
}
}
} }
} }

2
bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml

@ -136,7 +136,7 @@
<set> <set>
download_num = download_num + 1, update_time = (select NOW()) download_num = download_num + 1, update_time = (select NOW())
</set> </set>
where mark = #{item.mark} and status = '0' where mark = #{item} and status = '0'
</foreach> </foreach>
</update> </update>

Loading…
Cancel
Save