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 memberLevels) { List list = memberService.list(); if (StringUtils.isEmpty(memberLevels)) { // 如果memberLevels为空或为null,则无需进一步处理 return; } List 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 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 memberLevels = Lists.newArrayList(build1, build2, build3, build4, build5, build6, build7, build8, build9, build10); System.out.println(findAppropriateLevel(memberLevels, BigDecimal.valueOf(499))); } }