From 8ad99e5f72085d14fd56e8faa7aa36701823c8b5 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 05 十一月 2026 20:16:23 +0800
Subject: [PATCH] feat(crm): 统一客户团队数据权限并放开开票金额上限
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java | 97 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 97 insertions(+), 0 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
index 18d2cda..11e6a18 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
@@ -9,7 +9,12 @@
import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
+import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper;
+import cn.iocoder.yudao.module.crm.dal.mysql.contact.CrmContactMapper;
+import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper;
+import cn.iocoder.yudao.module.crm.dal.mysql.customer.CrmCustomerMapper;
import cn.iocoder.yudao.module.crm.dal.mysql.permission.CrmPermissionMapper;
import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
@@ -46,6 +51,14 @@
@Resource
private CrmPermissionMapper permissionMapper;
+ @Resource
+ private CrmCustomerMapper customerMapper;
+ @Resource
+ private CrmContactMapper contactMapper;
+ @Resource
+ private CrmBusinessMapper businessMapper;
+ @Resource
+ private CrmContractMapper contractMapper;
@Resource
@Lazy // 瑙e喅渚濊禆寰幆
private CrmContactService contactService;
@@ -177,6 +190,90 @@
@Override
@Transactional(rollbackFor = Exception.class)
+ public void syncCustomerOwnerPermission(Long customerId, Long ownerUserId) {
+ if (customerId == null || ownerUserId == null) {
+ return;
+ }
+ // 1. 鑱旂郴浜�
+ syncCustomerOwnerPermission(CrmBizTypeEnum.CRM_CONTACT.getType(), ownerUserId,
+ convertSet(contactMapper.selectListByCustomerId(customerId), CrmContactDO::getId));
+ // 2. 鍟嗘満
+ syncCustomerOwnerPermission(CrmBizTypeEnum.CRM_BUSINESS.getType(), ownerUserId,
+ convertSet(businessMapper.selectListByCustomerId(customerId), CrmBusinessDO::getId));
+ // 3. 鍚堝悓
+ syncCustomerOwnerPermission(CrmBizTypeEnum.CRM_CONTRACT.getType(), ownerUserId,
+ convertSet(contractMapper.selectListByCustomerId(customerId), CrmContractDO::getId));
+ }
+
+ /**
+ * 鍚屾鏌愪釜涓氬姟绫诲瀷涓嬶紝瀹㈡埛璐熻矗浜虹殑銆愯鍐欍�戞潈闄�
+ *
+ * @param bizType 鏁版嵁绫诲瀷
+ * @param ownerUserId 瀹㈡埛璐熻矗浜虹紪鍙�
+ * @param bizIds 鏁版嵁缂栧彿闆嗗悎
+ */
+ private void syncCustomerOwnerPermission(Integer bizType, Long ownerUserId, Set<Long> bizIds) {
+ if (CollUtil.isEmpty(bizIds)) {
+ return;
+ }
+ // 1. 鏌ヨ宸叉湁鐨勬潈闄愶紝閬垮厤閲嶅鎻掑叆
+ Map<Long, CrmPermissionDO> permissionMap = new HashMap<>();
+ for (CrmPermissionDO permission : permissionMapper.selectByBizTypeAndBizIds(bizType, bizIds)) {
+ if (ObjUtil.equal(permission.getUserId(), ownerUserId)) {
+ permissionMap.putIfAbsent(permission.getBizId(), permission);
+ }
+ }
+ // 2. 璁$畻闇�瑕佹柊澧炪�佸崌绾х殑鏉冮檺
+ List<CrmPermissionDO> createPermissions = new ArrayList<>();
+ List<CrmPermissionDO> updatePermissions = new ArrayList<>();
+ for (Long bizId : bizIds) {
+ CrmPermissionDO permission = permissionMap.get(bizId);
+ if (permission == null) {
+ createPermissions.add(new CrmPermissionDO().setBizType(bizType).setBizId(bizId)
+ .setUserId(ownerUserId).setLevel(CrmPermissionLevelEnum.WRITE.getLevel()));
+ } else if (CrmPermissionLevelEnum.isRead(permission.getLevel())) {
+ // 鍙鍗囩骇涓鸿鍐欙紱璐熻矗浜虹骇鍒笉闄嶇骇
+ updatePermissions.add(new CrmPermissionDO().setId(permission.getId())
+ .setLevel(CrmPermissionLevelEnum.WRITE.getLevel()));
+ }
+ }
+ // 3. 鎵归噺鍐欏叆
+ if (CollUtil.isNotEmpty(createPermissions)) {
+ permissionMapper.insertBatch(createPermissions);
+ }
+ if (CollUtil.isNotEmpty(updatePermissions)) {
+ permissionMapper.updateBatch(updatePermissions);
+ }
+ }
+
+ @Override
+ public void createPermissionForCustomerOwner(Integer bizType, Long bizId, Long customerId, Long ownerUserId) {
+ if (bizId == null || customerId == null) {
+ return;
+ }
+ // 1. 鏌ヨ瀹㈡埛璐熻矗浜�
+ CrmCustomerDO customer = customerMapper.selectById(customerId);
+ if (customer == null || customer.getOwnerUserId() == null) {
+ return;
+ }
+ Long customerOwnerUserId = customer.getOwnerUserId();
+ // 2. 鏁版嵁璐熻矗浜烘湰韬氨鏄鎴疯礋璐d汉鏃讹紝宸茬粡鎷ユ湁鏉冮檺锛屾棤闇�閲嶅鎺堟潈
+ if (ObjUtil.equal(customerOwnerUserId, ownerUserId)) {
+ return;
+ }
+ // 3. 涓嶅瓨鍦ㄥ垯鏂板璇诲啓鏉冮檺锛屽彧璇诲垯鍗囩骇涓鸿鍐�
+ CrmPermissionDO permission = permissionMapper.selectByBizTypeAndBizIdByUserId(bizType, bizId, customerOwnerUserId);
+ if (permission == null) {
+ permissionMapper.insert(new CrmPermissionDO().setBizType(bizType).setBizId(bizId)
+ .setUserId(customerOwnerUserId).setLevel(CrmPermissionLevelEnum.WRITE.getLevel()));
+ } else if (CrmPermissionLevelEnum.isRead(permission.getLevel())) {
+ permissionMapper.updateById(new CrmPermissionDO().setId(permission.getId())
+ .setLevel(CrmPermissionLevelEnum.WRITE.getLevel()));
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
public void updatePermission(CrmPermissionUpdateReqVO updateReqVO) {
// 1. 鏍¢獙瀛樺湪
validatePermissionExists(updateReqVO.getIds());
--
Gitblit v1.9.3