This commit is contained in:
777
2025-12-11 17:27:08 +08:00
parent 5b04c4ef37
commit c7bdea46d0
10 changed files with 113 additions and 12 deletions

View File

@@ -159,10 +159,6 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
if(!flag){
throw new ServiceException("扣费失败,请重新购买");
}
// 开始处理 接收方的费用
BigDecimal imRate = systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.IM_ANCHOR_INCOME_RATE);
Long anchorAmount = CaiNumUtil.coin(price,imRate);
baseMapper.incsIncomeCoin(toUser.getId(),anchorAmount);
Long tractId = IdManager.nextId();
// 记录消费方的流水
if(coin != 0){
@@ -171,15 +167,22 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
if(incomeCoin != 0){
accountChangeLogService.saveLogNoAdmin(fromUser.getId(),fromUser.getUsercode(), AccountChangeCodeEnum.IM_INCOME_COIN_OUT,incomeCoin,tractId,toUser.getId());
}
// 记录接收方的流水
if(anchorAmount != 0){
try {
// 记录主播的消费记录
accountTotalManager.incsMessageIncomeCoin(toUser.getId(), anchorAmount,tractId);
}catch (Exception e){
log.error("主播消费记录失败",e);
// 开始处理 接收方的费用
boolean openImInvite = userService.getOpenImInvite(fromUser);
if(openImInvite){
BigDecimal imRate = systemConfigManager.getSystemConfigOfBigDecimal(SystemConfigEnum.IM_ANCHOR_INCOME_RATE);
Long anchorAmount = CaiNumUtil.coin(price,imRate);
baseMapper.incsIncomeCoin(toUser.getId(),anchorAmount);
// 记录接收方的流水
if(anchorAmount != 0){
try {
// 统计主播的收入
accountTotalManager.incsMessageIncomeCoin(toUser.getId(), anchorAmount,tractId);
}catch (Exception e){
log.error("统计主播的收入失败",e);
}
accountChangeLogService.saveLogNoAdmin(toUser.getId(),toUser.getUsercode(), AccountChangeCodeEnum.IM_INCOME,anchorAmount,tractId,fromUser.getId());
}
accountChangeLogService.saveLogNoAdmin(toUser.getId(),toUser.getUsercode(), AccountChangeCodeEnum.IM_INCOME,anchorAmount,tractId,fromUser.getId());
}
return tractId;
}

View File

@@ -103,6 +103,7 @@ public class BatchAddUserServiceImpl extends ServiceImpl<BatchAddUserMapper,Batc
.set(User::getBirthday, LocalDate.now().plusYears(-18))
.set(User::getAge, 18)
.set(User::getGender, batchAddUser.getGender())
.set(User::getOpenImInvite, 1)
.set(User::getCityId, "140882")
.set(User::getCity, "河津"));
if(GenderEnum.WOMEN.getCode().equals(batchAddUser.getGender())){

View File

@@ -14,7 +14,9 @@ import com.ruoyi.cai.dto.app.query.index.UserQuery;
import com.ruoyi.cai.dto.app.vo.user.*;
import com.ruoyi.cai.dto.commom.user.MinUser;
import com.ruoyi.cai.enums.GenderEnum;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.im.ImManager;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.mapper.AccountDeleteMapper;
import com.ruoyi.cai.mapper.UserMapper;
import com.ruoyi.cai.notice.YunxinHttpService;
@@ -27,6 +29,7 @@ import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.BeanConvertUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RAtomicLong;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
@@ -92,6 +95,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private YunxinHttpService yunxinHttpService;
@Autowired
private RedissonClient redissonClient;
@Autowired
private SystemConfigManager systemConfigManager;
@Override
public User getByUsername(String username) {
@@ -501,4 +506,26 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
imManager.updateImInfo(user.getId(),user.getAvatar(),user.getNickname(),user.getGender());
}
@Override
public boolean getOpenImInvite(User fromUser){
boolean openImInviteSecurity = systemConfigManager.getSystemConfigOfBool(SystemConfigEnum.OPEN_IM_INVITE_SECURITY);
if(!openImInviteSecurity){
return true;
}
if(fromUser.getOpenImInvite() == null || fromUser.getOpenImInvite() == 1){
return true;
}
String key = String.format("cai:openImInvite:%s", fromUser.getId());
RAtomicLong imCount = redissonClient.getAtomicLong(key);
long imC = imCount.addAndGet(1);
if(imC > 8){
this.update(Wrappers.lambdaUpdate(User.class)
.eq(User::getId, fromUser.getId())
.set(User::getOpenImInvite, 1));
log.info("IM盗刷防护生效: 用户={},Im聊天已经达到8次开启IM分销", fromUser.getUsercode());
return true;
}
log.info("IM盗刷防护生效: 用户={},Im聊天已到{}次不开启IM分销", fromUser.getUsercode(), imC);
return false;
}
}