Browse Source

fix(customer): 修复客户团队成员管理中的重复角色处理问题

- 当同一用户具有不同角色时,改为新增记录而非覆盖更新
- 在客户创建和更新流程中自动添加业务员和客服到团队成员
- 实现了角色变更时的正确处理逻辑,避免角色冲突
- 添加了业务员和客服ID的集合处理和名称映射功能
- 优化了团队成员的新增和更新操作流程
hurx 20 hours ago
parent
commit
264b5a04ec

+ 99 - 24
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerInfoServiceImpl.java

@@ -1023,18 +1023,35 @@ public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, Cus
         TeamMemberVo existingUser = teamMemberMapper.selectByObjectNoAndUserNoWithDeleted(objectNo, userNo);
 
         if (existingUser != null) {
-            // 4. 如果人员已存在,恢复并更新其角色信息
-            teamMemberMapper.restoreMemberById(
-                existingUser.getId(),
-                userNo,
-                realName,
-                roleCode,
-                updateAccredit,
-                izManager,
-                LoginHelper.getUserId(),
-                LoginHelper.getDeptId(),
-                PlatformContext.getPlatform()
-            );
+            // 如果角色相同,恢复并更新
+            if (Objects.equals(existingUser.getRoleCode(), roleCode)) {
+                teamMemberMapper.restoreMemberById(
+                    existingUser.getId(),
+                    userNo,
+                    realName,
+                    roleCode,
+                    updateAccredit,
+                    izManager,
+                    LoginHelper.getUserId(),
+                    LoginHelper.getDeptId(),
+                    PlatformContext.getPlatform()
+                );
+            } else {
+                // 角色不同(如同一个人既是负责人又是客服),新增一条记录
+                TeamMember member = new TeamMember();
+                member.setDataType(12);
+                member.setObjectNo(objectNo);
+                member.setUserNo(userNo);
+                member.setRealName(realName);
+                member.setRoleCode(roleCode);
+                member.setIzManager(izManager);
+                member.setUpdateAccredit(updateAccredit);
+                member.setPlatformCode(PlatformContext.getPlatform());
+                member.setCreateUserId(LoginHelper.getUserId());
+                member.setCreateOrgId(LoginHelper.getDeptId());
+                member.setIsDelete(0);
+                teamMemberMapper.insert(member);
+            }
         } else {
             // 5. 如果人员不存在,执行新增
             TeamMember member = new TeamMember();
@@ -1743,10 +1760,30 @@ public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, Cus
             customerBusinessInfo.setBusinessCustomerName(bo.getBusinessCustomerName());
             customerBusinessInfo.setSocialCreditCode(bo.getSocialCreditCode());
             customerBusinessInfoMapper.insert(customerBusinessInfo);
+            // 将业务员和客服加入团队成员
+            Set<Long> staffIds = new HashSet<>();
+            if (ObjectUtils.isNotEmpty(bo.getSalesPersonId())) {
+                staffIds.add(bo.getSalesPersonId());
+            }
+            if (ObjectUtils.isNotEmpty(bo.getServiceStaffId())) {
+                staffIds.add(bo.getServiceStaffId());
+            }
+            Map<Long, String> staffNameMap = Collections.emptyMap();
+            if (!staffIds.isEmpty()) {
+                staffNameMap = remoteComStaffService.selectStaffNameByIds(staffIds);
+            }
+            if (ObjectUtils.isNotEmpty(bo.getSalesPersonId())) {
+                saveOrUpdateTeamMember(add.getCustomerNo(), bo.getSalesPersonId(),
+                    staffNameMap.get(bo.getSalesPersonId()), "1", 1, 1);
+            }
+            if (ObjectUtils.isNotEmpty(bo.getServiceStaffId())) {
+                saveOrUpdateTeamMember(add.getCustomerNo(), bo.getServiceStaffId(),
+                    staffNameMap.get(bo.getServiceStaffId()), "3", 0, 1);
+            }
         }
         return flag;
     }
-
+    
     /**
      * 修改客户信息 客户导入时只需要导入主数据
      *
@@ -1775,6 +1812,26 @@ public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, Cus
                 customerBusinessInfo.setSocialCreditCode(bo.getSocialCreditCode());
                 customerBusinessInfoMapper.updateById(customerBusinessInfo);
             }
+            // 将业务员和客服加入团队成员
+            Set<Long> staffIds = new HashSet<>();
+            if (ObjectUtils.isNotEmpty(bo.getSalesPersonId())) {
+                staffIds.add(bo.getSalesPersonId());
+            }
+            if (ObjectUtils.isNotEmpty(bo.getServiceStaffId())) {
+                staffIds.add(bo.getServiceStaffId());
+            }
+            Map<Long, String> staffNameMap = Collections.emptyMap();
+            if (!staffIds.isEmpty()) {
+                staffNameMap = remoteComStaffService.selectStaffNameByIds(staffIds);
+            }
+            if (ObjectUtils.isNotEmpty(bo.getSalesPersonId())) {
+                saveOrUpdateTeamMember(update.getCustomerNo(), bo.getSalesPersonId(),
+                    staffNameMap.get(bo.getSalesPersonId()), "1", 1, 1);
+            }
+            if (ObjectUtils.isNotEmpty(bo.getServiceStaffId())) {
+                saveOrUpdateTeamMember(update.getCustomerNo(), bo.getServiceStaffId(),
+                    staffNameMap.get(bo.getServiceStaffId()), "3", 0, 1);
+            }
         }
 
         return flag;
@@ -1819,17 +1876,35 @@ public class CustomerInfoServiceImpl extends ServiceImpl<CustomerInfoMapper, Cus
         }
 
         if (existing != null) {
-            teamMemberMapper.restoreMemberById(
-                existing.getId(),
-                userNo,
-                realName,
-                roleCode,
-                updateAccredit,
-                izManager,
-                LoginHelper.getUserId(),
-                LoginHelper.getDeptId(),
-                PlatformContext.getPlatform()
-            );
+            // 如果角色相同,恢复并更新
+            if (Objects.equals(existing.getRoleCode(), roleCode)) {
+                teamMemberMapper.restoreMemberById(
+                    existing.getId(),
+                    userNo,
+                    realName,
+                    roleCode,
+                    updateAccredit,
+                    izManager,
+                    LoginHelper.getUserId(),
+                    LoginHelper.getDeptId(),
+                    PlatformContext.getPlatform()
+                );
+            } else {
+                // 角色不同(如同一个人既是负责人又是客服),新增一条记录
+                TeamMember member = new TeamMember();
+                member.setDataType(12);
+                member.setObjectNo(objectNo);
+                member.setUserNo(userNo);
+                member.setRealName(realName);
+                member.setRoleCode(roleCode);
+                member.setIzManager(izManager);
+                member.setUpdateAccredit(updateAccredit);
+                member.setPlatformCode(PlatformContext.getPlatform());
+                member.setCreateUserId(LoginHelper.getUserId());
+                member.setCreateOrgId(LoginHelper.getDeptId());
+                member.setIsDelete(0);
+                teamMemberMapper.insert(member);
+            }
         } else {
             TeamMember member = new TeamMember();
             member.setDataType(12);