diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java index 3f39f6b..5925392 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorProfitServiceImpl.java +++ b/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,12 +41,15 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { @Autowired private InviteLogMapper inviteLogMapper; + @Autowired + private RedissonService redissonService; + @Override public boolean checkCreatorProfitExist(String mark) { CreatorProfit creatorProfit = creatorProfitMapper.checkCreatorProfitExist(mark); - if(creatorProfit != null){ + if (creatorProfit != null) { return true; - }else{ + } else { return false; } } @@ -56,15 +60,15 @@ 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()+ - "0"+date.replace("-",""); + String mark = creatorProfit.getCreatorId().toString() + creatorProfit.getImgId().toString() + creatorProfit.getAppType() + creatorProfit.getPlatform() + + "0" + date.replace("-", ""); //缓存中下载总数+1 - tiktokImgService.writeDownloadTotalNum(creatorProfit.getAppType(),creatorProfit.getPlatform()); + tiktokImgService.writeDownloadTotalNum(creatorProfit.getAppType(), creatorProfit.getPlatform()); //检查收益表是否存在广告记录,存在则更新次数 boolean b = this.checkCreatorProfitExist(mark); - if(b){ + if (b) { int update = this.updateCreatorProfitDownloadNum(mark); - log.info("唯一标识【{}】收益下载次数+1",mark); + log.info("唯一标识【{}】收益下载次数+1", mark); return update; } //不存在则新增广告记录 @@ -77,22 +81,22 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { creatorProfit.setDownloadNum(1); creatorProfit.setMark(mark); //根据平台生成订单号 - switch (creatorProfit.getPlatform()){ - case "0" : - creatorProfit.setOrderNo("DY"+IdUtil.getSnowflakeNextIdStr()); + switch (creatorProfit.getPlatform()) { + case "0": + creatorProfit.setOrderNo("DY" + IdUtil.getSnowflakeNextIdStr()); break; - case "1" : - creatorProfit.setOrderNo("KS"+IdUtil.getSnowflakeNextIdStr()); + case "1": + creatorProfit.setOrderNo("KS" + IdUtil.getSnowflakeNextIdStr()); break; - case "2" : - creatorProfit.setOrderNo("WX"+IdUtil.getSnowflakeNextIdStr()); + case "2": + creatorProfit.setOrderNo("WX" + IdUtil.getSnowflakeNextIdStr()); break; default: - creatorProfit.setOrderNo("UNI"+IdUtil.getSnowflakeNextIdStr()); + creatorProfit.setOrderNo("UNI" + IdUtil.getSnowflakeNextIdStr()); break; } int insert = creatorProfitMapper.insert(creatorProfit); - log.info("新增艺术家【{}】图片【{}】应用【{}】平台【{}】收益记录",creatorProfit.getCreatorId(), creatorProfit.getImgId(), creatorProfit.getAppType(), creatorProfit.getPlatform()); + log.info("新增艺术家【{}】图片【{}】应用【{}】平台【{}】收益记录", creatorProfit.getCreatorId(), creatorProfit.getImgId(), creatorProfit.getAppType(), creatorProfit.getPlatform()); return insert; } @@ -106,17 +110,17 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { LambdaQueryWrapper wrapper = new LambdaQueryWrapper(); wrapper.eq(InviteLog::getInvitedCreatorId, creatorProfit.getCreatorId()); List inviteLogs = inviteLogMapper.selectList(wrapper); - if(inviteLogs.size() > 0){ + if (inviteLogs.size() > 0) { List updateList = new ArrayList<>(); List insertList = new ArrayList<>(); for (InviteLog inviteLog : inviteLogs) { - String mark = inviteLog.getCreatorId()+creatorProfit.getImgId()+creatorProfit.getAppType()+creatorProfit.getPlatform()+ - "1"+date.replace("-",""); + String mark = inviteLog.getCreatorId().toString() + creatorProfit.getImgId().toString() + creatorProfit.getAppType() + creatorProfit.getPlatform() + + "1" + date.replace("-", ""); //检查收益表是否存在邀请记录,存在则记录更新邀请者Id boolean b = this.checkCreatorProfitExist(mark); - if(b){ + if (b) { updateList.add(mark); - }else{ + } else { //不存在则新增邀请者id creatorProfit.setCreatorId(inviteLog.getCreatorId()); creatorProfit.setCreateTime(new Date()); @@ -128,29 +132,29 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { creatorProfit.setDownloadNum(1); creatorProfit.setMark(mark); //根据平台生成订单号 - switch (creatorProfit.getPlatform()){ - case "0" : - creatorProfit.setOrderNo("DY"+IdUtil.getSnowflakeNextIdStr()); + switch (creatorProfit.getPlatform()) { + case "0": + creatorProfit.setOrderNo("DY" + IdUtil.getSnowflakeNextIdStr()); break; - case "1" : - creatorProfit.setOrderNo("KS"+IdUtil.getSnowflakeNextIdStr()); + case "1": + creatorProfit.setOrderNo("KS" + IdUtil.getSnowflakeNextIdStr()); break; - case "2" : - creatorProfit.setOrderNo("WX"+IdUtil.getSnowflakeNextIdStr()); + case "2": + creatorProfit.setOrderNo("WX" + IdUtil.getSnowflakeNextIdStr()); break; default: - creatorProfit.setOrderNo("UNI"+IdUtil.getSnowflakeNextIdStr()); + creatorProfit.setOrderNo("UNI" + IdUtil.getSnowflakeNextIdStr()); break; } insertList.add(creatorProfit); } } - if(updateList.size() > 0){ + if (updateList.size() > 0) { //批量更新邀请记录 //TODO 修改此处BUG creatorProfitMapper.batchUpdateDownload(updateList); } - if(insertList.size() > 0){ + if (insertList.size() > 0) { //批量新增邀请记录 creatorProfitMapper.batchInsertInviteProfit(insertList); } @@ -187,7 +191,6 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { } - @Override @Transactional(rollbackFor = Exception.class) public int changeIsShow(Long id, String status) { @@ -195,7 +198,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { wrapper.eq(CreatorProfit::getId, id); CreatorProfit creatorProfit = new CreatorProfit(); creatorProfit.setIsShow(status); - return creatorProfitMapper.update(creatorProfit,wrapper); + return creatorProfitMapper.update(creatorProfit, wrapper); } @Override @@ -225,7 +228,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { } //批量更新收益表确认收益状态 creatorProfitMapper.batchUpdate(idList); - log.info("==============批量更新艺术家收益状态完成,耗时【{}】毫秒!===============",System.currentTimeMillis() - startTime); + log.info("==============批量更新艺术家收益状态完成,耗时【{}】毫秒!===============", System.currentTimeMillis() - startTime); } @Override @@ -262,8 +265,8 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { } @Override - public List queryFrontPreProfit(Long creatorId,String type) { - return creatorProfitMapper.queryFrontPreProfit(creatorId,type); + public List queryFrontPreProfit(Long creatorId, String type) { + return creatorProfitMapper.queryFrontPreProfit(creatorId, type); } @Override @@ -278,7 +281,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { @Override public List queryFrontInProfitAmt(Long creatorId, String type) { - return creatorProfitMapper.queryFrontInProfitAmt(creatorId,type); + return creatorProfitMapper.queryFrontInProfitAmt(creatorId, type); } @Override @@ -288,7 +291,7 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { @Override public List queryFrontEndProfitAmt(Long creatorId, String type) { - return creatorProfitMapper.queryFrontEndProfitAmt(creatorId,type); + return creatorProfitMapper.queryFrontEndProfitAmt(creatorId, type); } @Override @@ -304,10 +307,10 @@ public class CreatorProfitServiceImpl implements CreatorProfitService { @Override public List queryProfitByCreatorId(Long creatorId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(CreatorProfit::getCreatorId,creatorId); + wrapper.eq(CreatorProfit::getCreatorId, creatorId); wrapper.eq(CreatorProfit::getStatus, "1"); wrapper.eq(CreatorProfit::getConfirmStatus, "1"); - wrapper.notIn(CreatorProfit::getType,"2"); + wrapper.notIn(CreatorProfit::getType, "2"); return creatorProfitMapper.selectList(wrapper); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java index b569910..eb0a392 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/ProfitVerifyOrderServiceImpl.java +++ b/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,35 +198,52 @@ public class ProfitVerifyOrderServiceImpl implements ProfitVerifyOrderService { @Override @Transactional(rollbackFor = Exception.class) public int transInfoWallet() { - //查询所有审核通过的艺术家 - List creators = creatorService.queryPassList(); - //查询审所有核状态为已到账,且已确认且类型不为会员的收益 - List confirmProfits = creatorProfitService.queryConfirmList(); - List list = new ArrayList<>(); - List creatorIdList = new ArrayList<>(); - if(confirmProfits.size() > 0 && creators.size() > 0){ - for (ConfirmProfitVo confirmProfit : confirmProfits) { - for (Creator creator : creators) { - if(confirmProfit.getCreatorId().equals(creator.getId())){ - creator.setAmt(creator.getAmt().add(confirmProfit.getAmt())); - list.add(creator); - creatorIdList.add(confirmProfit.getCreatorId()); + //获取分布式锁 + RLock lock = redissonService.getRLock(RedisKeyConstant.VERIFY_PROFIT_LOCK_KEY + RandomUtil.randomString(8)); + try{ + if(lock.tryLock(2L, 10L, TimeUnit.SECONDS)){ + log.info("锁获取成功,开始执行转入钱包操作"); + //查询所有审核通过的艺术家 + List creators = creatorService.queryPassList(); + //查询审所有核状态为已到账,且已确认且类型不为会员的收益 + List confirmProfits = creatorProfitService.queryConfirmList(); + List list = new ArrayList<>(); + List creatorIdList = new ArrayList<>(); + if(confirmProfits.size() > 0 && creators.size() > 0){ + for (ConfirmProfitVo confirmProfit : confirmProfits) { + for (Creator creator : creators) { + if(confirmProfit.getCreatorId().equals(creator.getId())){ + creator.setAmt(creator.getAmt().add(confirmProfit.getAmt())); + list.add(creator); + creatorIdList.add(confirmProfit.getCreatorId()); + } + } + } + //更新艺术家钱包 + creatorService.batchUpdate(list); + //批量更新收益单状态 + List profitIdList = new ArrayList<>(); + for (Long aLong : creatorIdList) { + List creatorProfits = creatorProfitService.queryProfitByCreatorId(aLong); + for (CreatorProfit creatorProfit : creatorProfits) { + profitIdList.add(creatorProfit.getId()); + } } + return creatorProfitService.batchUpdate(profitIdList); + }else{ + return 0; } + }else{ + throw new ServiceException("系统繁忙,请稍候重试!"); } - //更新艺术家钱包 - creatorService.batchUpdate(list); - //批量更新收益单状态 - List profitIdList = new ArrayList<>(); - for (Long aLong : creatorIdList) { - List creatorProfits = creatorProfitService.queryProfitByCreatorId(aLong); - for (CreatorProfit creatorProfit : creatorProfits) { - profitIdList.add(creatorProfit.getId()); - } + }catch (Exception e){ + log.error("转入钱包失败!错误原因为【{}】",e.getMessage()); + throw new ServiceException("系统繁忙,请勿重复操作!"); + }finally { + if(lock.isHeldByCurrentThread()){ + lock.unlock(); + log.info("转入钱包操作执行完毕,释放锁成功!"); } - return creatorProfitService.batchUpdate(profitIdList); - }else{ - return 0; } } } diff --git a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml index 5b9a30d..2fbd5e9 100644 --- a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml +++ b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorProfitMapper.xml @@ -136,7 +136,7 @@ download_num = download_num + 1, update_time = (select NOW()) - where mark = #{item.mark} and status = '0' + where mark = #{item} and status = '0'