From 8f91a5b98517818f82b5d29eeed6d9913b680819 Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 13 Dec 2025 21:36:37 -0800 Subject: [PATCH] =?UTF-8?q?feat(authorization-service):=20=E4=B8=BA=20getC?= =?UTF-8?q?ityTeamRewardDistribution=20=E6=B7=BB=E5=8A=A0=20addMonthlyTree?= =?UTF-8?q?s=20=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 参考 getCommunityRewardDistribution 的实现,在以下三个场景添加月度新增树数累计: 1. benefitActive=true 时:全部 treeCount 给该市团队,累加 treeCount 2. currentTeamCount >= initialTarget 时(兜底处理):累加 treeCount 3. 跨越考核达标点时:只累加归自己的部分 afterTargetCount 这确保了市团队权益与社区权益的月度考核追踪逻辑一致。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../authorization-application.service.ts | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/backend/services/authorization-service/src/application/services/authorization-application.service.ts b/backend/services/authorization-service/src/application/services/authorization-application.service.ts index 62c89d8a..085e52b6 100644 --- a/backend/services/authorization-service/src/application/services/authorization-application.service.ts +++ b/backend/services/authorization-service/src/application/services/authorization-application.service.ts @@ -1727,6 +1727,11 @@ export class AuthorizationApplicationService { // 4. 检查权益状态 if (nearestAuthCity.benefitActive) { + // 权益已激活,全部给该市团队 + // 累加月度新增树数(用于月度考核) + nearestAuthCity.addMonthlyTrees(treeCount) + await this.authorizationRepository.save(nearestAuthCity) + return { distributions: [ { accountSequence: nearestAuthCity.userId.accountSequence, treeCount, reason: '市团队权益已激活' }, @@ -1765,13 +1770,20 @@ export class AuthorizationApplicationService { const distributions: Array<{ accountSequence: string; treeCount: number; reason: string }> = [] if (currentTeamCount >= initialTarget) { + // 已达标但权益未激活(可能是月度考核失败),全部给该市团队 + // 注:这种情况下应该由系统自动激活权益,但这里作为兜底处理 distributions.push({ accountSequence: nearestAuthCity.userId.accountSequence, treeCount, reason: '已达初始考核目标', }) + // 自动激活权益 await this.tryActivateBenefit(nearestAuthCity) + + // 累加月度新增树数(用于月度考核) + nearestAuthCity.addMonthlyTrees(treeCount) + await this.authorizationRepository.save(nearestAuthCity) } else { // toReachTarget: 还差多少棵达到考核目标(包括达标那一棵) // 业务规则:达标前的全部给上级/总部,超过达标点后才给该市团队 @@ -1800,7 +1812,7 @@ export class AuthorizationApplicationService { reason: `初始考核(${currentTeamCount}+${toReachTarget}=${initialTarget}/${initialTarget}),${parentReason}`, }) } - // 超过达标点的部分,给该市团队 + // 超过达标点的部分(第101棵开始),给该市团队 const afterTargetCount = treeCount - toReachTarget if (afterTargetCount > 0) { distributions.push({ @@ -1809,8 +1821,15 @@ export class AuthorizationApplicationService { reason: `考核达标后权益生效(第${initialTarget + 1}棵起)`, }) } + // 自动激活权益(本次认种使其达标) await this.tryActivateBenefit(nearestAuthCity) + + // 激活后累加月度新增树数(只计算归自己的那部分) + if (afterTargetCount > 0) { + nearestAuthCity.addMonthlyTrees(afterTargetCount) + await this.authorizationRepository.save(nearestAuthCity) + } } }