This commit is contained in:
dute7liang
2024-01-21 21:14:00 +08:00
parent 5c9218ea83
commit 9a904f0c0c
10 changed files with 66 additions and 8 deletions

View File

@@ -3,6 +3,7 @@ package com.ruoyi.cai.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.cai.enums.ConsumeLogType;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
@@ -175,4 +176,20 @@ public class ConsumeLog implements Serializable {
} }
} }
/**
* 获取创建受益人的源头
* @return
*/
public Long getCreateInviteUserId(){
if(ConsumeLogType.GIFT.getCode().equals(this.getType())){
return this.targetUserId;
}else if(ConsumeLogType.GUARD.getCode().equals(this.getType())){
return this.targetUserId;
}else if(ConsumeLogType.VIDEO.getCode().equals(this.getType())){
return this.targetUserId;
}else if(ConsumeLogType.RECHARGE.getCode().equals(this.getType())){
return this.sourceUserId;
}
return null;
}
} }

View File

@@ -21,4 +21,6 @@ public interface UserInviteMapper extends BaseMapper<UserInvite> {
Page<UserListVo> inviteUserPage(@Param("build") Page<Object> build, @Param("inviteId") Long inviteId); Page<UserListVo> inviteUserPage(@Param("build") Page<Object> build, @Param("inviteId") Long inviteId);
Page<UserInviteAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") UserInviteAdminVo bo); Page<UserInviteAdminVo> pageAdmin(@Param("build") Page<Object> build, @Param("bo") UserInviteAdminVo bo);
void incsCoinTotal(@Param("id") Long id, @Param("amount") Long amount);
} }

View File

@@ -4,10 +4,12 @@ import com.alibaba.fastjson2.JSON;
import com.ruoyi.cai.mq.dto.CommonConsumerEnum; import com.ruoyi.cai.mq.dto.CommonConsumerEnum;
import com.ruoyi.cai.mq.handle.dto.RankDTO; import com.ruoyi.cai.mq.handle.dto.RankDTO;
import com.ruoyi.cai.rank.RankManager; import com.ruoyi.cai.rank.RankManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@Slf4j
public class RankIHandle implements IHandle { public class RankIHandle implements IHandle {
@Autowired @Autowired

View File

@@ -14,6 +14,7 @@ public class RankDTO extends CommonDTO {
* 2-邀请榜 * 2-邀请榜
*/ */
private Integer rankType; private Integer rankType;
// 受益人ID
private Long userId; private Long userId;
private Long price; private Long price;
private LocalDateTime happenTime; private LocalDateTime happenTime;

View File

@@ -38,7 +38,7 @@ public interface AccountService extends IService<Account> {
Page<AccountAdminVo> pageAdmin(PageQuery pageQuery, AccountAdminVo bo); Page<AccountAdminVo> pageAdmin(PageQuery pageQuery, AccountAdminVo bo);
void distribution(ConsumeLog consumeLog,Long userId, Long amount, AccountChangeCodeEnum accountChangeEnum); boolean distribution(ConsumeLog consumeLog, Long userId, Long amount, AccountChangeCodeEnum accountChangeEnum);
WithholdingFeeUserResp withholdingFeeUser(Long userId, Long price); WithholdingFeeUserResp withholdingFeeUser(Long userId, Long price);

View File

@@ -23,4 +23,6 @@ public interface UserInviteService extends IService<UserInvite> {
Page<UserListVo> inviteUserPage(PageQuery pageQuery, Long inviteId); Page<UserListVo> inviteUserPage(PageQuery pageQuery, Long inviteId);
Page<UserInviteAdminVo> pageAdmin(PageQuery pageQuery, UserInviteAdminVo bo); Page<UserInviteAdminVo> pageAdmin(PageQuery pageQuery, UserInviteAdminVo bo);
void incsCoinAsync(Long geUserId, Long seUserId, Long amount);
} }

View File

@@ -234,32 +234,38 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
/** /**
* 分销 * 分销
*
* @return
*/ */
@Override @Override
public void distribution(ConsumeLog consumeLog,Long userId, Long amount, AccountChangeCodeEnum accountChangeEnum) { public boolean distribution(ConsumeLog consumeLog, Long userId, Long amount, AccountChangeCodeEnum accountChangeEnum) {
User user = userService.getById(userId); User user = userService.getById(userId);
Account account = this.getByUserId(userId); Account account = this.getByUserId(userId);
if(account == null || user == null){ if(account == null || user == null){
log.error("分销失败,无效账号 userId={}",userId); log.error("分销失败,无效账号 userId={}",userId);
return; return false;
} }
if(amount == null || accountChangeEnum == null){ if(amount == null || accountChangeEnum == null){
log.error("分销失败,参数错误 amount={},accountChangeEnum={}",amount,accountChangeEnum); log.error("分销失败,参数错误 amount={},accountChangeEnum={}",amount,accountChangeEnum);
return; return false;
} }
baseMapper.incsCoin(userId, amount); baseMapper.incsCoin(userId, amount);
if(ConsumeLogType.GIFT.getCode().equals(consumeLog.getType())){ // 礼物 if(ConsumeLogType.GIFT.getCode().equals(consumeLog.getType())){ // 礼物
Gift gift = giftService.getById(consumeLog.getBusinessParam()); Gift gift = giftService.getById(consumeLog.getBusinessParam());
accountChangeLogService.saveLogNoAdmin(userId,user.getUsercode(), accountChangeEnum,amount,consumeLog.getTraceId(), accountChangeLogService.saveLogNoAdmin(userId,user.getUsercode(), accountChangeEnum,amount,consumeLog.getTraceId(),
consumeLog.getTargetUserId(),gift); consumeLog.getTargetUserId(),gift);
return true;
}else if(ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType()) }else if(ConsumeLogType.VIDEO.getCode().equals(consumeLog.getType())
|| ConsumeLogType.GUARD.getCode().equals(consumeLog.getType())){ // 视频和守护 || ConsumeLogType.GUARD.getCode().equals(consumeLog.getType())){ // 视频和守护
accountChangeLogService.saveLogNoAdmin(userId,user.getUsercode(), accountChangeEnum,amount,consumeLog.getTraceId(), accountChangeLogService.saveLogNoAdmin(userId,user.getUsercode(), accountChangeEnum,amount,consumeLog.getTraceId(),
consumeLog.getTargetUserId()); consumeLog.getTargetUserId());
return true;
}else if(ConsumeLogType.RECHARGE.getCode().equals(consumeLog.getType())){ // 充值 }else if(ConsumeLogType.RECHARGE.getCode().equals(consumeLog.getType())){ // 充值
accountChangeLogService.saveLogNoAdmin(userId,user.getUsercode(), accountChangeEnum,amount,consumeLog.getTraceId(), accountChangeLogService.saveLogNoAdmin(userId,user.getUsercode(), accountChangeEnum,amount,consumeLog.getTraceId(),
consumeLog.getSourceUserId()); consumeLog.getSourceUserId());
return true;
} }
return false;
} }
/** /**

View File

@@ -100,18 +100,17 @@ public class ConsumeLogServiceImpl extends ServiceImpl<ConsumeLogMapper, Consume
if(consumer.getOneUserId() != null && BooleanUtils.isTrue(consumer.getOneJoin()) if(consumer.getOneUserId() != null && BooleanUtils.isTrue(consumer.getOneJoin())
&& consumer.getOneAmount() > 0){ && consumer.getOneAmount() > 0){
AccountChangeCodeEnum changeCodeEnum = ConsumeLogType.getOneInviteChange(code); AccountChangeCodeEnum changeCodeEnum = ConsumeLogType.getOneInviteChange(code);
accountService.distribution(consumer,consumer.getOneUserId(),consumer.getOneAmount(),changeCodeEnum); oneInviteSend = accountService.distribution(consumer, consumer.getOneUserId(), consumer.getOneAmount(), changeCodeEnum);
oneInviteSend = true;
} }
// 计算工会 // 计算工会
if(consumer.getUnionUserId() != null && BooleanUtils.isTrue(consumer.getUnionJoin()) if(consumer.getUnionUserId() != null && BooleanUtils.isTrue(consumer.getUnionJoin())
&& consumer.getUnionAmount() > 0){ && consumer.getUnionAmount() > 0){
AccountChangeCodeEnum changeCodeEnum = ConsumeLogType.getUnionChange(code); AccountChangeCodeEnum changeCodeEnum = ConsumeLogType.getUnionChange(code);
accountService.distribution(consumer,consumer.getUnionUserId(),consumer.getUnionAmount(),changeCodeEnum); oneUnionSend = accountService.distribution(consumer, consumer.getUnionUserId(), consumer.getUnionAmount(), changeCodeEnum);
oneUnionSend = true;
} }
if(oneInviteSend){ if(oneInviteSend){
rankManager.sendInviteRankMq(consumer.getOneUserId(),consumer.getOneAmount(),consumer.getTraceId()); rankManager.sendInviteRankMq(consumer.getOneUserId(),consumer.getOneAmount(),consumer.getTraceId());
userInviteService.incsCoinAsync(consumer.getOneUserId(),consumer.getCreateInviteUserId(),consumer.getOneAmount());
} }
if(oneUnionSend){ if(oneUnionSend){
rankManager.sendInviteRankMq(consumer.getUnionUserId(),consumer.getUnionAmount(),consumer.getTraceId()); rankManager.sendInviteRankMq(consumer.getUnionUserId(),consumer.getUnionAmount(),consumer.getTraceId());

View File

@@ -9,6 +9,7 @@ import com.ruoyi.cai.dto.admin.vo.UserInviteAdminVo;
import com.ruoyi.cai.dto.app.dto.InviteCountDTO; import com.ruoyi.cai.dto.app.dto.InviteCountDTO;
import com.ruoyi.cai.dto.app.vo.invite.InviteHomeVo; import com.ruoyi.cai.dto.app.vo.invite.InviteHomeVo;
import com.ruoyi.cai.dto.app.vo.user.UserListVo; import com.ruoyi.cai.dto.app.vo.user.UserListVo;
import com.ruoyi.cai.executor.ExecutorConstant;
import com.ruoyi.cai.mapper.UserInviteMapper; import com.ruoyi.cai.mapper.UserInviteMapper;
import com.ruoyi.cai.service.UserInviteService; import com.ruoyi.cai.service.UserInviteService;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
@@ -64,4 +65,27 @@ public class UserInviteServiceImpl extends ServiceImpl<UserInviteMapper, UserInv
return baseMapper.pageAdmin(pageQuery.build(), bo); return baseMapper.pageAdmin(pageQuery.build(), bo);
} }
/**
*
* @param geUserId 获取收益的人
* @param seUserId 创建收益的人
*/
@Override
public void incsCoinAsync(Long geUserId, Long seUserId, Long amount) {
ExecutorConstant.COMMON_EXECUTOR.execute(() -> {
if(geUserId == null || seUserId == null || amount == null || amount <= 0){
log.error("执行收益的递增失败【参数异常】");
return;
}
UserInvite one = this.getOne(Wrappers.lambdaQuery(UserInvite.class)
.eq(UserInvite::getInviteId, geUserId)
.eq(UserInvite::getUserId, seUserId));
if(one == null){
log.error("执行收益的递增失败");
return;
}
baseMapper.incsCoinTotal(one.getId(),amount);
});
}
} }

View File

@@ -10,6 +10,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="inviteId" column="invite_id"/> <result property="inviteId" column="invite_id"/>
<result property="createTime" column="create_time"/> <result property="createTime" column="create_time"/>
</resultMap> </resultMap>
<update id="incsCoinTotal">
update cai_user_invite
set reward_coin_total = reward_coin_total + #{amount}
where id = #{id}
</update>
<select id="countInviteAndReward" resultType="com.ruoyi.cai.dto.app.dto.InviteCountDTO"> <select id="countInviteAndReward" resultType="com.ruoyi.cai.dto.app.dto.InviteCountDTO">
select ifnull(sum(reward_coin_total),0) as total_reward, select ifnull(sum(reward_coin_total),0) as total_reward,
ifnull(count(1),0) as total_invite ifnull(count(1),0) as total_invite