| | |
| | | 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; |
| | |
| | | */ |
| | | @Async |
| | | public void handleMemberLevel(List<MemberLevel> memberLevels) { |
| | | memberService.list(); |
| | | 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))); |
| | | } |
| | | } |