fix: 充值核账按绑定账号和角色整组

This commit is contained in:
yml2213
2026-10-19 17:22:51 +08:00
parent 3a6649a054
commit c299f63537
4 changed files with 103 additions and 38 deletions
+43 -3
View File
@@ -2042,6 +2042,7 @@ class TestCollabRecharge(TestCollabBase):
gift_name: str,
required_points: int | None,
role: str = ROLE,
account: str = BIND,
) -> HuyaExternalOrder:
order = self._create(
order_no=order_no,
@@ -2055,11 +2056,11 @@ class TestCollabRecharge(TestCollabBase):
self.user,
order,
client=FakeProbeClient(
FakeBindResp(nick=self.BIND, role=role, plat="苹果(iOS)", area="微信")
FakeBindResp(nick=account, role=role, plat="苹果(iOS)", area="微信")
),
)
assert order.status == collab.STATUS_TO_RECHARGE
assert order.bind_game_account == self.BIND
assert order.bind_game_account == account
return order
@staticmethod
@@ -2100,7 +2101,9 @@ class TestCollabRecharge(TestCollabBase):
assert order.points_surplus == 50
assert order.points_threshold == 100
assert order.points_check_reason == "ok"
assert order.points_check_detail["group_key"] == self.BIND
assert (
order.points_check_detail["group_key"] == f"{self.BIND} / {self.ROLE}"
)
# 同一 uid 只验一次 CK、只查一次积分
assert len(client.calls) == 1
assert len(client.score_calls) == 1
@@ -2167,6 +2170,43 @@ class TestCollabRecharge(TestCollabBase):
assert first.status == second.status == collab.STATUS_RECHARGED
assert [call["uid"] for call in client.score_calls] == [1005, 1006]
def test_same_generic_nickname_with_different_roles_are_separate_groups(self):
"""生产回归:bind_game_account 可能都是「微信用户」,必须再按角色分组。
只按账号分组会把不同买家合成一组,required_total 被放大成 48000。
"""
first = self._ready(
"RC-NICK-1",
"1013",
gift_name="礼包A",
required_points=200,
role="角色A",
account="微信用户",
)
second = self._ready(
"RC-NICK-2",
"1014",
gift_name="礼包B",
required_points=200,
role="角色B",
account="微信用户",
)
client = FakeRechargeClient(
FakeBindResp(nick="微信用户", role="角色A"),
FakeBindResp(nick="微信用户", role="角色B"),
scores=[self._score(250), self._score(300)],
)
result = self._check([first, second], client)
assert len(result["groups"]) == 2
assert {group["balance"] for group in result["groups"]} == {250, 300}
assert {group["required_total"] for group in result["groups"]} == {200}
assert first.status == second.status == collab.STATUS_RECHARGED
assert first.points_required_total == second.points_required_total == 200
assert first.points_check_detail["group_key"] == "微信用户 / 角色A"
assert second.points_check_detail["group_key"] == "微信用户 / 角色B"
def test_ck_invalid_keeps_group_status_unchanged(self):
order = self._ready("RC-9", "1007", gift_name="礼包A", required_points=200)
client = FakeRechargeClient(