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.update.LambdaUpdateWrapper;
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.InviteLog;
import com.bnyer.img.dto.CreatorProfitPageDto;
@ -40,6 +41,9 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
@Autowired
private InviteLogMapper inviteLogMapper;
@Autowired
private RedissonService redissonService;
@Override
public boolean checkCreatorProfitExist(String mark) {
CreatorProfit creatorProfit = creatorProfitMapper.checkCreatorProfitExist(mark);
@ -56,7 +60,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
long times = System.currentTimeMillis();
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("-", "");
//缓存中下载总数+1
tiktokImgService.writeDownloadTotalNum(creatorProfit.getAppType(), creatorProfit.getPlatform());
@ -110,7 +114,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
List<String> updateList = new ArrayList<>();
List<CreatorProfit> insertList = new ArrayList<>();
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("-", "");
//检查收益表是否存在邀请记录,存在则记录更新邀请者Id
boolean b = this.checkCreatorProfitExist(mark);
@ -187,7 +191,6 @@ public class CreatorProfitServiceImpl implements CreatorProfitService {
}
@Override
@Transactional(rollbackFor = Exception.class)
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;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.exception.ServiceException;
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());
try{
if(lock.tryLock(0L, 30L, TimeUnit.SECONDS)){
if(lock.tryLock(2L, 10L, TimeUnit.SECONDS)){
log.info("锁获取成功,开始执行审核收益操作");
//审核通过计算收益
//昨日总收益的80%作为广告收益
@ -171,6 +172,7 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
}
}catch (Exception e){
log.error("审核收益单失败!错误原因为【{}】",e.getMessage());
throw new ServiceException("系统繁忙,请勿重复操作!");
}finally {
//释放锁
if(lock.isHeldByCurrentThread()){
@ -196,6 +198,11 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
@Override
@Transactional(rollbackFor = Exception.class)
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();
//查询审所有核状态为已到账,且已确认且类型不为会员的收益
@ -226,5 +233,17 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService {
}else{
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>
download_num = download_num + 1, update_time = (select NOW())
</set>
where mark = #{item.mark} and status = '0'
where mark = #{item} and status = '0'
</foreach>
</update>

Loading…
Cancel
Save