refactor(task): 重构经销商订单结算任务中的上级用户查找逻辑

- 引入 UpstreamUserFinder 工具类来统一处理向上游用户链路的遍历逻辑
- 添加缓存机制减少数据库查询次数,提高性能
- 修改 settleOneOrder 方法签名以传递缓存对象
- 更新门店分红上级查找逻辑,从简单的链路取前两级改为精确查找门店角色用户
- 删除废弃的 ShopOrderSettlement10584Task 临时排查任务类
- 添加 UpstreamUserFinder 的单元测试确保逻辑正确性
This commit is contained in:
2026-01-26 12:34:56 +08:00
parent 803ac3301e
commit 3b63172012
4 changed files with 199 additions and 268 deletions

View File

@@ -0,0 +1,65 @@
package com.gxwebsoft.shop.util;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import static org.junit.jupiter.api.Assertions.assertEquals;
class UpstreamUserFinderTest {
@Test
void findFirstNMatchingUpstreamUsers_skipsNonMatchingAndKeepsOrder() {
// 100 -> 101 -> 102 -> 103 -> null
Map<Integer, Integer> parent = Map.of(
100, 101,
101, 102,
102, 103
);
Set<Integer> shopRoleUsers = Set.of(102, 103);
Function<Integer, Integer> parentResolver = parent::get;
Predicate<Integer> matcher = shopRoleUsers::contains;
List<Integer> got = UpstreamUserFinder.findFirstNMatchingUpstreamUsers(100, 2, 20, parentResolver, matcher);
assertEquals(List.of(102, 103), got);
}
@Test
void findFirstNMatchingUpstreamUsers_returnsSingleWhenOnlyOneMatchExists() {
// 200 -> 201 -> 202 -> null
Map<Integer, Integer> parent = Map.of(
200, 201,
201, 202
);
Set<Integer> shopRoleUsers = Set.of(201);
List<Integer> got = UpstreamUserFinder.findFirstNMatchingUpstreamUsers(200, 2, 20, parent::get, shopRoleUsers::contains);
assertEquals(List.of(201), got);
}
@Test
void findFirstNMatchingUpstreamUsers_stopsOnCycle() {
// 300 -> 301 -> 302 -> 301 (cycle)
Map<Integer, Integer> parent = Map.of(
300, 301,
301, 302,
302, 301
);
Set<Integer> shopRoleUsers = Set.of(301, 302);
List<Integer> got = UpstreamUserFinder.findFirstNMatchingUpstreamUsers(300, 2, 20, parent::get, shopRoleUsers::contains);
assertEquals(List.of(301, 302), got);
}
@Test
void findFirstNMatchingUpstreamUsers_returnsEmptyForNullStart() {
List<Integer> got = UpstreamUserFinder.findFirstNMatchingUpstreamUsers(null, 2, 20, x -> null, x -> true);
assertEquals(List.of(), got);
}
}