package com.ruoyi.member.service.async;
|
|
import com.google.common.collect.Lists;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.member.domain.MemberLevel;
|
import com.ruoyi.member.service.IMemberService;
|
import com.ruoyi.system.api.domain.Member;
|
import java.math.BigDecimal;
|
import java.util.List;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.stereotype.Service;
|
|
/**
|
* @author mitao
|
* @date 2024/6/6
|
*/
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class AsyncMethodService {
|
|
private final IMemberService memberService;
|
|
/**
|
* 处理修改等级条件金额后,同步调整用户等级
|
*
|
* @param memberLevels 会员等级条件列表
|
*/
|
@Async
|
public void handleMemberLevel(List<MemberLevel> memberLevels) {
|
List<Member> list = memberService.list();
|
if (StringUtils.isEmpty(memberLevels)) {
|
// 如果memberLevels为空或为null,则无需进一步处理
|
return;
|
}
|
|
List<Member> members = memberService.list();
|
if (StringUtils.isEmpty(members)) {
|
// 如果成员列表为空或为null,则无需进一步处理
|
return;
|
}
|
|
for (Member member : members) {
|
BigDecimal money = member.getMoney();
|
member.setLevel(findAppropriateLevel(memberLevels, money));
|
}
|
}
|
|
private static int findAppropriateLevel(List<MemberLevel> memberLevels, BigDecimal money) {
|
// 对于最开始的level,设置为0(假设0是最低等级)
|
int level = 0;
|
|
for (int i = 0; i < memberLevels.size(); i++) {
|
MemberLevel currentLevel = memberLevels.get(i);
|
BigDecimal currentCumulativeConsumption = currentLevel.getCumulativeConsumption();
|
|
// 如果当前成员的消费额小于等于当前等级的累积消费额
|
if (money.compareTo(currentCumulativeConsumption) < 0) {
|
return level;
|
}
|
|
// 更新level为当前等级,准备下一次比较
|
level = currentLevel.getLevel();
|
}
|
|
// 如果遍历完成后还没有返回,说明该成员的消费额高于所有已定义等级的累积消费额
|
level = memberLevels.get(memberLevels.size() - 1).getLevel();
|
return level;
|
}
|
|
public static void main(String[] args) {
|
MemberLevel build1 = MemberLevel.builder().id(1L).level(1)
|
.cumulativeConsumption(BigDecimal.valueOf(100))
|
.build();
|
MemberLevel build2 = MemberLevel.builder().id(2L).level(2)
|
.cumulativeConsumption(BigDecimal.valueOf(200))
|
.build();
|
MemberLevel build3 = MemberLevel.builder().id(3L).level(3)
|
.cumulativeConsumption(BigDecimal.valueOf(300))
|
.build();
|
MemberLevel build4 = MemberLevel.builder().id(4L).level(4)
|
.cumulativeConsumption(BigDecimal.valueOf(500))
|
.build();
|
MemberLevel build5 = MemberLevel.builder().id(5L).level(5)
|
.cumulativeConsumption(BigDecimal.valueOf(500))
|
.build();
|
MemberLevel build6 = MemberLevel.builder().id(6L).level(6)
|
.cumulativeConsumption(BigDecimal.valueOf(600))
|
.build();
|
MemberLevel build7 = MemberLevel.builder().id(7L).level(7)
|
.cumulativeConsumption(BigDecimal.valueOf(700))
|
.build();
|
MemberLevel build8 = MemberLevel.builder().id(8L).level(8)
|
.cumulativeConsumption(BigDecimal.valueOf(800))
|
.build();
|
MemberLevel build9 = MemberLevel.builder().id(9L).level(9)
|
.cumulativeConsumption(BigDecimal.valueOf(900))
|
.build();
|
MemberLevel build10 = MemberLevel.builder().id(10L).level(10)
|
.cumulativeConsumption(BigDecimal.valueOf(1000))
|
.build();
|
List<MemberLevel> memberLevels = Lists.newArrayList(build1, build2, build3, build4,
|
build5, build6, build7, build8, build9, build10);
|
System.out.println(findAppropriateLevel(memberLevels, BigDecimal.valueOf(499)));
|
}
|
}
|