From 656f7edd28deaa706b4e3852844c6fe3cded0dd3 Mon Sep 17 00:00:00 2001 From: ShengLong <452591453@qq.com> Date: Tue, 28 Apr 2026 09:54:55 +0800 Subject: [PATCH] 1 --- .../adminapi/logic/stats/ConversionLogic.php | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/server/app/adminapi/logic/stats/ConversionLogic.php b/server/app/adminapi/logic/stats/ConversionLogic.php index a78ffe8d..35a7cc7c 100644 --- a/server/app/adminapi/logic/stats/ConversionLogic.php +++ b/server/app/adminapi/logic/stats/ConversionLogic.php @@ -67,7 +67,10 @@ class ConversionLogic $supportsDeptBinding = AccountCost::supportsDeptBinding(); $restrictAccountCostByDept = $supportsDeptBinding; $restrictStatsByDept = $supportsDeptBinding && $mediaChannelCode !== ''; - $eligibleDeptIds = $restrictAccountCostByDept ? self::expandDeptIdsWithDescendants($accountCostDeptIds) : $accountCostDeptIds; + $scopeDeptIds = $restrictStatsByDept + ? self::loadChannelBoundDeptIds($mediaChannelCode) + : $accountCostDeptIds; + $eligibleDeptIds = $restrictAccountCostByDept ? self::expandDeptIdsWithDescendants($scopeDeptIds) : $scopeDeptIds; if ($restrictStatsByDept) { $entities = self::filterEntitiesByChannelDeptScope($entities, $dimension, $eligibleDeptIds, $adminToDeptIds); @@ -440,6 +443,27 @@ class ConversionLogic return array_values($expanded); } + /** + * 渠道绑定部门不依赖当前统计区间,避免某天没有录入成本时把统计实体过滤为空。 + * + * @return int[] + */ + private static function loadChannelBoundDeptIds(string $mediaChannelCode): array + { + $mediaChannelCode = trim($mediaChannelCode); + if ($mediaChannelCode === '' || !AccountCost::supportsDeptBinding()) { + return []; + } + + $deptIds = Db::name('account_cost') + ->where('media_channel_code', $mediaChannelCode) + ->where('dept_id', '>', 0) + ->distinct(true) + ->column('dept_id'); + + return array_values(array_unique(array_filter(array_map('intval', $deptIds), static fn (int $deptId): bool => $deptId > 0))); + } + /** * 自媒体渠道选中时,统计范围只允许落在渠道绑定部门及其子部门内。 *