Skip to content

Commit 733ee32

Browse files
committed
fix: Related customer list query
--bug=1063793 --user=宋昌昌 【线索】github#413线索关联客户时,带出来所有客户 https://www.tapd.cn/34675357/s/1802881
1 parent c5f830d commit 733ee32

File tree

4 files changed

+37
-14
lines changed

4 files changed

+37
-14
lines changed

backend/crm/src/main/java/cn/cordys/common/service/DataScopeService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public DeptDataPermissionDTO getDeptDataPermission(String userId, String orgId,
5454
deptDataPermission.setViewId(viewId);
5555
if (deptDataPermission.getAll() && InternalUserView.isDepartment(viewId)) {
5656
// 数据权限是全部,但是查询条件是部门,则按照部门查询
57-
return getDeptDataPermissionForAllPermission(userId, orgId);
57+
return getDeptDataPermissionForAllPermission(userId, orgId);
5858
}
5959
}
6060

backend/crm/src/main/java/cn/cordys/crm/customer/dto/request/CustomerPageRequest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.cordys.crm.customer.dto.request;
22

33
import cn.cordys.common.dto.BasePageRequest;
4+
import cn.cordys.common.dto.DeptDataPermissionDTO;
45
import io.swagger.v3.oas.annotations.media.Schema;
56
import lombok.Data;
67

@@ -17,9 +18,12 @@ public class CustomerPageRequest extends BasePageRequest {
1718
@Schema(description = "公海ID{公海客户列表时传参}")
1819
private String poolId;
1920

20-
@Schema(description = "是否查询转移客户列表")
21+
@Schema(description = "是否查询关联客户列表")
2122
private Boolean transition;
2223

23-
@Schema(description = "查询转移需要的公海客户时传参")
24+
@Schema(description = "查询需要关联的公海客户传参")
2425
private List<String> transitionPoolIds;
26+
27+
@Schema(description = "关联客户数据权限")
28+
private DeptDataPermissionDTO transitionDataPermission;
2529
}

backend/crm/src/main/java/cn/cordys/crm/customer/mapper/ExtCustomerMapper.xml

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
</update>
1515

1616
<select id="list" resultType="cn.cordys.crm.customer.dto.response.CustomerListResponse">
17-
select c.id, c.`name`, if(c.in_shared_pool, null, c.owner) as owner, c.create_time, c.update_time, c.create_user, c.update_user, c.collection_time, c.pool_id,
17+
select distinct c.id, c.`name`, if(c.in_shared_pool, null, c.owner) as owner, c.create_time, c.update_time, c.create_user, c.update_user, c.collection_time, c.pool_id,
1818
c.follower, c.follow_time, c.reason_id
1919
<if test="dataPermission != null and dataPermission.visible">
2020
,cc.collaboration_type
@@ -55,6 +55,11 @@
5555
and cc.user_id = #{userId}
5656
</if>
5757

58+
<if test="request.transition and !request.transitionDataPermission.all">
59+
left join customer_collaboration cc on c.id = cc.customer_id
60+
left join sys_organization_user sou on c.owner = sou.user_id
61+
</if>
62+
5863
where c.organization_id = #{orgId}
5964

6065
<if test="request.poolId == null and !request.transition">
@@ -65,15 +70,26 @@
6570
and c.in_shared_pool is true and c.pool_id = #{request.poolId}
6671
</if>
6772

68-
<if test="request.transition">
69-
and (c.in_shared_pool is false
70-
<if test="request.transitionPoolIds != null and request.transitionPoolIds.size()> 0">
71-
or (c.in_shared_pool is true and c.pool_id in
72-
<foreach collection="request.transitionPoolIds" item="poolId" open="(" close=")" separator=",">
73-
#{poolId}
74-
</foreach>
75-
)
76-
</if>
73+
<if test="request.transition and !request.transitionDataPermission.all">
74+
and (
75+
cc.user_id = #{userId}
76+
<if test="request.transitionDataPermission != null and request.transitionDataPermission.deptIds.size() > 0">
77+
or sou.department_id in
78+
<foreach collection="request.transitionDataPermission.deptIds" item="deptId" open="(" close=")" separator=",">
79+
#{deptId}
80+
</foreach>
81+
</if>
82+
<if test="request.transitionDataPermission != null and request.transitionDataPermission.self">
83+
or c.owner = #{userId}
84+
</if>
85+
<if test="request.transitionPoolIds != null and request.transitionPoolIds.size()> 0">
86+
or (
87+
c.in_shared_pool is true and c.pool_id in
88+
<foreach collection="request.transitionPoolIds" item="poolId" open="(" close=")" separator=",">
89+
#{poolId}
90+
</foreach>
91+
)
92+
</if>
7793
)
7894
</if>
7995

backend/crm/src/main/java/cn/cordys/crm/customer/service/CustomerService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import cn.cordys.common.util.LogUtils;
2929
import cn.cordys.common.util.Translator;
3030
import cn.cordys.common.utils.ConditionFilterUtils;
31+
import cn.cordys.context.OrganizationContext;
3132
import cn.cordys.crm.customer.constants.CustomerResultCode;
3233
import cn.cordys.crm.customer.domain.*;
3334
import cn.cordys.crm.customer.dto.request.*;
@@ -66,6 +67,7 @@
6667
import cn.cordys.excel.utils.EasyExcelExporter;
6768
import cn.cordys.mybatis.BaseMapper;
6869
import cn.cordys.mybatis.lambda.LambdaQueryWrapper;
70+
import cn.cordys.security.SessionUtils;
6971
import cn.idev.excel.FastExcelFactory;
7072
import com.github.pagehelper.Page;
7173
import com.github.pagehelper.PageHelper;
@@ -162,12 +164,13 @@ public PagerWithOption<List<CustomerListResponse>> list(CustomerPageRequest requ
162164

163165
public PagerWithOption<List<CustomerListResponse>> transitionList(CustomerPageRequest request, String userId, String orgId) {
164166
/*
165-
* 数据范围: 当前用户所在公海&所有私海客户
167+
* 数据范围: 当前用户所在公海&私海客户(协作客户&&数据权限客户)
166168
*/
167169
List<String> scopeIds = userExtendService.getUserScopeIds(userId, orgId);
168170
List<CustomerPool> pools = extCustomerPoolMapper.getPoolByScopeIds(scopeIds, orgId);
169171
request.setTransitionPoolIds(pools.stream().map(CustomerPool::getId).toList());
170172
request.setTransition(true);
173+
request.setTransitionDataPermission(dataScopeService.getDeptDataPermission(userId, orgId, null, PermissionConstants.CUSTOMER_MANAGEMENT_READ));
171174
return list(request, userId, orgId, null);
172175
}
173176

0 commit comments

Comments
 (0)