From d39e4f7d839167c16425086dfa2f8747bccfdff9 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 05 十一月 2026 17:39:01 +0800
Subject: [PATCH] feat: 打通销售采购财务闭环并完成累计业务优化
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java | 53 +++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java
index e672759..9e5891a 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java
@@ -7,14 +7,19 @@
import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum;
import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
+import cn.iocoder.yudao.module.hrm.api.handover.HrmUserHandoverApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.github.yulichang.autoconfigure.MybatisPlusJoinProperties;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.slf4j.Slf4j;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Set;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@@ -24,6 +29,7 @@
*
* @author HUIHUI
*/
+@Slf4j
public class CrmPermissionUtils {
/** 瓒呯骇绠$悊鍛樻煡鐪嬪鎴锋椂涓嶅彈鍏捣鍙搴﹀紑鍏冲奖鍝嶃�� */
@@ -58,6 +64,45 @@
}
/**
+ * 鑾峰緱"鎴戣礋璐g殑鏁版嵁"瀵瑰簲鐨勭敤鎴风紪鍙烽泦鍚堬細鏈汉 + 宸插皢鏁版嵁浜ゆ帴缁欐垜鐨勭鑱岀敤鎴�
+ *
+ * 绂昏亴浜ゆ帴瀹屾垚鍚庯紝浜ゆ帴浜洪渶瑕佽兘鐪嬪埌绂昏亴浜哄悕涓嬬殑鏁版嵁锛屽洜姝よ繖閲岄�氳繃 HrmUserHandoverApi 鎵╁睍銆�
+ *
+ * @param userId 褰撳墠鐢ㄦ埛缂栧彿
+ * @return 鐢ㄦ埛缂栧彿闆嗗悎锛岃嚦灏戝寘鍚湰浜�
+ */
+ public static Set<Long> getOwnerUserIds(Long userId) {
+ Set<Long> ownerUserIds = new LinkedHashSet<>();
+ if (userId == null) {
+ return ownerUserIds;
+ }
+ ownerUserIds.add(userId);
+ try {
+ HrmUserHandoverApi handoverApi = SpringUtil.getBean(HrmUserHandoverApi.class);
+ Set<Long> handoverUserIds = handoverApi.expandUserIds(new HashSet<>(ownerUserIds));
+ if (CollUtil.isNotEmpty(handoverUserIds)) {
+ ownerUserIds.addAll(handoverUserIds);
+ }
+ } catch (Exception ex) {
+ // HRM 妯″潡鏈儴缃叉椂闄嶇骇涓哄彧鐪嬫湰浜烘暟鎹紝涓嶅奖鍝� CRM 姝e父浣跨敤
+ log.warn("[getOwnerUserIds][鎵╁睍浜ゆ帴鐢ㄦ埛澶辫触锛寀serIds({}) 浠呮寜鏈汉鏁版嵁鏌ヨ]", userId, ex);
+ }
+ return ownerUserIds;
+ }
+
+ /**
+ * 杩藉姞"鎴戣礋璐g殑鏁版嵁"鐨勮繃婊ゆ潯浠讹紝鏀寔绂昏亴浜ゆ帴鍚庣殑鏁版嵁鍙鎬ф墿灞�
+ */
+ private static <T extends MPJLambdaWrapper<?>> void appendOwnerUserCondition(T query, String ownerUserIdField, Long userId) {
+ Set<Long> ownerUserIds = getOwnerUserIds(userId);
+ if (ownerUserIds.size() <= 1) {
+ query.eq(ownerUserIdField, userId);
+ } else {
+ query.in(ownerUserIdField, ownerUserIds);
+ }
+ }
+
+ /**
* 鏋勯�� CRM 鏁版嵁绫诲瀷鏁版嵁銆愬垎椤点�戞煡璇㈡潯浠�
*
* @param query 杩炶〃鏌ヨ瀵硅薄
@@ -70,9 +115,9 @@
Long userId, Integer sceneType) {
MybatisPlusJoinProperties mybatisPlusJoinProperties = SpringUtil.getBean(MybatisPlusJoinProperties.class);
final String ownerUserIdField = mybatisPlusJoinProperties.getTableAlias() + ".owner_user_id";
- // 鍦烘櫙涓�锛氭垜璐熻矗鐨勬暟鎹�
+ // 鍦烘櫙涓�锛氭垜璐熻矗鐨勬暟鎹紙鍚鑱屼氦鎺ョ粰鎴戠殑鏁版嵁锛�
if (CrmSceneTypeEnum.isOwner(sceneType)) {
- query.eq(ownerUserIdField, userId);
+ appendOwnerUserCondition(query, ownerUserIdField, userId);
}
// 鍦烘櫙浜岋細鎴戝弬涓庣殑鏁版嵁锛堟垜鏈夎鎴栧啓鏉冮檺锛屽苟涓斾笉鏄礋璐d汉锛�
if (CrmSceneTypeEnum.isInvolved(sceneType)) {
@@ -105,8 +150,8 @@
if (isCrmAdmin() || hasCustomerViewAllPermission()) {
return; // 璺宠繃杩囨护锛屾煡鐪嬪叏閮�
}
- // 鏃犳潈闄愬垯闄嶇骇涓�"鎴戣礋璐g殑"
- query.eq(ownerUserIdField, userId);
+ // 鏃犳潈闄愬垯闄嶇骇涓�"鎴戣礋璐g殑"锛堝惈绂昏亴浜ゆ帴缁欐垜鐨勬暟鎹級
+ appendOwnerUserCondition(query, ownerUserIdField, userId);
}
}
--
Gitblit v1.9.3