package cc.mrbird.febs;
|
|
import cc.mrbird.febs.dapp.dto.ConnectDto;
|
import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
|
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
|
import cc.mrbird.febs.dapp.entity.DappStorage;
|
import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
|
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
|
import cc.mrbird.febs.dapp.enumerate.MoneyFlowEnum;
|
import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
|
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
|
import cc.mrbird.febs.dapp.mapper.DappStorageMapper;
|
import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
|
import cc.mrbird.febs.dapp.service.DappMemberService;
|
import cc.mrbird.febs.dapp.service.DappSystemService;
|
import cc.mrbird.febs.dapp.vo.TeamDownVo;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import org.junit.jupiter.api.Test;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author wzy
|
* @date 2022-06-09
|
**/
|
@SpringBootTest
|
public class MemberTest {
|
|
@Autowired
|
private DappMemberService dappMemberService;
|
@Autowired
|
private DappFundFlowDao dappFundFlowDao;
|
|
@Resource
|
private DappSystemService dappSystemService;
|
|
@Resource
|
private DappStorageMapper dappStorageMapper;
|
|
@Resource
|
private DataDictionaryCustomMapper dataDictionaryCustomMapper;
|
|
@Resource
|
private DappMemberDao dappMemberDao;
|
|
@Test
|
public void register() {//注册
|
ConnectDto connectDto = new ConnectDto();
|
connectDto.setAddress("0x597e5F0EDB294e7d28EB10A95aa2EEcd169a2dd7");
|
connectDto.setInviteId("53609999");
|
dappMemberService.connect(connectDto);
|
}
|
|
@Test
|
public void registerV2() {//存储
|
Long memberId = 348L;
|
BigDecimal bigDecimal = new BigDecimal("500");
|
DappFundFlowEntity fundFlow = new DappFundFlowEntity(
|
memberId,
|
bigDecimal.abs(),
|
MoneyFlowEnum.CUN_CHU.getValue(),
|
1,
|
BigDecimal.ZERO,
|
StrUtil.format(MoneyFlowEnum.CUN_CHU.getDescrition(),bigDecimal));
|
dappFundFlowDao.insert(fundFlow);
|
|
}
|
|
@Test
|
public void registerV3() {//存储
|
dappSystemService.teamPerk(4360L);
|
|
}
|
|
@Test
|
public void registerV4() {//存储
|
|
DataDictionaryCustom jiliChiDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
DataDictionaryEnum.JILI_CHI.getType(),
|
DataDictionaryEnum.JILI_CHI.getCode()
|
);
|
|
BigDecimal realAmount = BigDecimal.ZERO;
|
//DAO永动激励池50%
|
BigDecimal jiLiTotal = new BigDecimal(jiliChiDic.getValue()).multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN);
|
if(BigDecimal.ZERO.compareTo(jiLiTotal) >= 0){
|
return;
|
}
|
|
|
/**
|
* 其中50%给予当天大单排名激励前4名,40%、30%、20、10%
|
*/
|
BigDecimal daDanTotal = jiLiTotal.multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN);
|
if(daDanTotal.compareTo(BigDecimal.ZERO) > 0){
|
|
int oneCount = 4;
|
int twoCount = 3;
|
int threeCount = 2;
|
int fourCount = 1;
|
int count = oneCount + twoCount + threeCount + fourCount;
|
//每一份的奖励数量
|
BigDecimal everyAmount = daDanTotal.divide(new BigDecimal(count));
|
|
if(everyAmount.compareTo(BigDecimal.ZERO) > 0){
|
DappStorage dappStorageOne = dappStorageMapper.selectAmountByDesc(DateUtil.offsetDay(new Date(),0),0,1);
|
if(ObjectUtil.isNotEmpty(dappStorageOne)){
|
BigDecimal multiply = everyAmount.multiply(new BigDecimal(oneCount));
|
dappSystemService.updateBalanceInsertFlow(
|
multiply,
|
dappStorageOne.getMemberId(),
|
MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(),
|
StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply));
|
|
realAmount = realAmount.add(multiply);
|
}
|
DappStorage dappStorageTwo = dappStorageMapper.selectAmountByDesc(DateUtil.offsetDay(new Date(),0),1,1);
|
if(ObjectUtil.isNotEmpty(dappStorageTwo)){
|
BigDecimal multiply = everyAmount.multiply(new BigDecimal(twoCount));
|
dappSystemService.updateBalanceInsertFlow(
|
multiply,
|
dappStorageTwo.getMemberId(),
|
MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(),
|
StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply));
|
|
realAmount = realAmount.add(multiply);
|
}
|
DappStorage dappStorageThree = dappStorageMapper.selectAmountByDesc(DateUtil.offsetDay(new Date(),0),2,1);
|
if(ObjectUtil.isNotEmpty(dappStorageThree)){
|
BigDecimal multiply = everyAmount.multiply(new BigDecimal(threeCount));
|
dappSystemService.updateBalanceInsertFlow(
|
multiply,
|
dappStorageThree.getMemberId(),
|
MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(),
|
StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply));
|
|
realAmount = realAmount.add(multiply);
|
}
|
DappStorage dappStorageFour = dappStorageMapper.selectAmountByDesc(DateUtil.offsetDay(new Date(),0),3,1);
|
if(ObjectUtil.isNotEmpty(dappStorageFour)){
|
BigDecimal multiply = everyAmount.multiply(new BigDecimal(fourCount));
|
dappSystemService.updateBalanceInsertFlow(
|
multiply,
|
dappStorageFour.getMemberId(),
|
MoneyFlowEnum.DA_DAN_JI_LI_PERK.getValue(),
|
StrUtil.format(MoneyFlowEnum.DA_DAN_JI_LI_PERK.getDescrition(),daDanTotal,multiply));
|
|
realAmount = realAmount.add(multiply);
|
}
|
}
|
}
|
|
/**
|
* 另外50% 给予当天直推总业绩排名激励前10名,第1名40%,2-4名30%,5-10名30%
|
*/
|
BigDecimal directTotal = jiLiTotal.multiply(new BigDecimal("0.5")).setScale(2, BigDecimal.ROUND_DOWN);
|
/**
|
* 存放直推业绩<上级的memberId,直推总业绩>
|
*/
|
HashMap<Long, BigDecimal> map = new HashMap<>();
|
|
List<DappStorage> dappStorages = dappStorageMapper.selectListByDate(DateUtil.offsetDay(new Date(),0));
|
if(CollUtil.isNotEmpty(dappStorages)){
|
for(DappStorage dappStorage : dappStorages){
|
DappMemberEntity member = dappMemberDao.selectById(dappStorage.getMemberId());
|
if(StrUtil.isEmpty(member.getRefererId())){
|
continue;
|
}
|
DappMemberEntity memberRef = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
|
if(ObjectUtil.isEmpty(memberRef)){
|
continue;
|
}
|
Long id = memberRef.getId();
|
if(map.containsKey(id)){
|
BigDecimal bigDecimal = map.get(id);
|
BigDecimal add = bigDecimal.add(dappStorage.getAmount());
|
map.put(id,add);
|
}else{
|
map.put(id,dappStorage.getAmount());
|
}
|
}
|
}
|
/**
|
* 获取这个map的直推总业绩前十,分发奖励
|
*/
|
if(!map.isEmpty()){
|
// 使用Stream API按照BigDecimal从大到小排序
|
List<Map.Entry<Long, BigDecimal>> topTenEntries = map.entrySet().stream()
|
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
|
.limit(10)
|
.collect(Collectors.toList());
|
|
int startNum = 1;
|
for (Map.Entry<Long, BigDecimal> entry : topTenEntries) {
|
|
Long memberId = entry.getKey();
|
BigDecimal directAchieve = entry.getValue();
|
//第一名
|
if(startNum == 1){
|
BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.4")).setScale(2, BigDecimal.ROUND_DOWN);
|
dappSystemService.updateBalanceInsertFlow(
|
bigDecimal,
|
memberId,
|
MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(),
|
StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,bigDecimal));
|
|
realAmount = realAmount.add(bigDecimal);
|
}else if(startNum > 1 && startNum <=4){
|
BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.3")).setScale(2, BigDecimal.ROUND_DOWN);
|
BigDecimal divide = bigDecimal.divide(new BigDecimal("3"), 2, BigDecimal.ROUND_DOWN);
|
|
dappSystemService.updateBalanceInsertFlow(
|
divide,
|
memberId,
|
MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(),
|
StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,divide));
|
|
realAmount = realAmount.add(divide);
|
}else{
|
BigDecimal bigDecimal = directTotal.multiply(new BigDecimal("0.3")).setScale(2, BigDecimal.ROUND_DOWN);
|
BigDecimal divide = bigDecimal.divide(new BigDecimal("6"), 2, BigDecimal.ROUND_DOWN);
|
|
dappSystemService.updateBalanceInsertFlow(
|
divide,
|
memberId,
|
MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getValue(),
|
StrUtil.format(MoneyFlowEnum.ZHI_TUI_JI_LI_PERK.getDescrition(),directAchieve,startNum,divide));
|
|
realAmount = realAmount.add(divide);
|
}
|
startNum = startNum + 1;
|
}
|
}
|
|
BigDecimal subtract = new BigDecimal(jiliChiDic.getValue()).subtract(realAmount);
|
jiliChiDic.setValue(subtract.toString());
|
dataDictionaryCustomMapper.updateById(jiliChiDic);
|
}
|
@Test
|
public void testv5(){
|
Long memberId = 1L;
|
List<TeamDownVo> objects = new ArrayList<>();
|
|
DappMemberEntity memberEntity = dappMemberDao.selectById(memberId);
|
List<DappMemberEntity> directMembers = dappMemberDao.selectChildMemberDirectOrNot(memberEntity.getInviteId(), 1, null);
|
|
if(CollUtil.isNotEmpty(directMembers)){
|
|
for(DappMemberEntity directMember : directMembers){
|
TeamDownVo teamDownVo = new TeamDownVo();
|
|
|
|
teamDownVo.setAddress(directMember.getAddress());
|
List<DappMemberEntity> teamMembers = dappMemberDao.selectChildMemberDirectOrNot(directMember.getInviteId(), 2, null);
|
if(CollUtil.isEmpty(teamMembers)){
|
teamDownVo.setActiveCnt(0);
|
teamDownVo.setActiveAchieve(BigDecimal.ZERO);
|
}else{
|
List<DappMemberEntity> teamCntAva = teamMembers.stream().filter(dappMemberEntity -> dappMemberEntity.getActiveStatus() == 1).collect(Collectors.toList());
|
List<Long> collectTeam = teamCntAva.stream().map(DappMemberEntity::getId).collect(Collectors.toList());
|
|
if(CollUtil.isNotEmpty(collectTeam)){
|
QueryWrapper<DappStorage> collectTeamWrapper = new QueryWrapper<>();
|
collectTeamWrapper.in("member_id",collectTeam);
|
collectTeamWrapper.eq("state",1);
|
List<DappStorage> dappStoragesTeam = dappStorageMapper.selectList(collectTeamWrapper);
|
BigDecimal teamAchieve = dappStoragesTeam.stream()
|
.map(DappStorage::getAmount) // 映射amount到流中
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
teamDownVo.setActiveCnt(teamCntAva.size());
|
teamDownVo.setActiveAchieve(teamAchieve);
|
}else{
|
teamDownVo.setActiveCnt(0);
|
teamDownVo.setActiveAchieve(BigDecimal.ZERO);
|
}
|
}
|
|
objects.add(teamDownVo);
|
}
|
}
|
System.out.println(objects);
|
}
|
}
|