瀏覽代碼

📖 CRM:code review 商机模块

YunaiV 1 年之前
父節點
當前提交
9e3055ee1e
共有 32 個文件被更改,包括 326 次插入519 次删除
  1. 1 1
      yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
  2. 28 83
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/CrmBusinessController.java
  3. 3 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessPageReqVO.java
  4. 0 2
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java
  5. 22 25
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/CrmContactController.java
  6. 0 30
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkPageReqVO.java
  7. 0 26
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkRespVO.java
  8. 0 23
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkSaveReqVO.java
  9. 22 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessReqVO.java
  10. 0 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contactbusinesslink/CrmContactBusinessLinkController.java
  11. 1 1
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java
  12. 1 1
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java
  13. 1 1
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivablePlanController.java
  14. 7 7
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/CrmContactConvert.java
  15. 2 3
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/CrmContactBusinessDO.java
  16. 8 1
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/business/CrmBusinessMapper.java
  17. 0 30
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contactbusinesslink/CrmContactBusinessLinkMapper.java
  18. 34 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contactbusinesslink/CrmContactBusinessMapper.java
  19. 12 10
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java
  20. 24 42
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
  21. 10 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessStatusService.java
  22. 6 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessStatusServiceImpl.java
  23. 10 1
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessStatusTypeService.java
  24. 7 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessStatusTypeServiceImpl.java
  25. 0 72
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkService.java
  26. 0 129
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkServiceImpl.java
  27. 38 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessService.java
  28. 83 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessServiceImpl.java
  29. 0 10
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactService.java
  30. 3 18
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactServiceImpl.java
  31. 1 1
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java
  32. 2 2
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java

+ 1 - 1
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java

@@ -24,7 +24,7 @@ public interface ErrorCodeConstants {
     // ========== 联系人管理 1-020-003-000 ==========
     ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_020_003_000, "联系人不存在");
     ErrorCode CONTACT_BUSINESS_LINK_NOT_EXISTS = new ErrorCode( 1_020_003_001, "联系人商机关联不存在");
-    ErrorCode CONTACT_BUSINESS_LINK_CREATE_EMPTY = new ErrorCode( 1_020_003_002, "联系人商机关联参数为空");
+
     // ========== 回款 1-020-004-000 ==========
     ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_020_004_000, "回款不存在");
 

+ 28 - 83
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/CrmBusinessController.java

@@ -4,14 +4,9 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.Assert;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*;
-import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO;
-import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO;
 import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert;
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO;
@@ -33,13 +28,10 @@ import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
 import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.pojo.PageParam.PAGE_SIZE_NONE;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 
@@ -51,13 +43,10 @@ public class CrmBusinessController {
 
     @Resource
     private CrmBusinessService businessService;
-
     @Resource
     private CrmCustomerService customerService;
-
     @Resource
     private CrmBusinessStatusTypeService businessStatusTypeService;
-
     @Resource
     private CrmBusinessStatusService businessStatusService;
 
@@ -99,27 +88,7 @@ public class CrmBusinessController {
     @PreAuthorize("@ss.hasPermission('crm:business:query')")
     public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPage(@Valid CrmBusinessPageReqVO pageVO) {
         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(pageVO, getLoginUserId());
-        if (CollUtil.isEmpty(pageResult.getList())) {
-            return success(PageResult.empty(pageResult.getTotal()));
-        }
-        // 处理客户名称回显
-        // TODO @ljlleo:可以使用 CollectionUtils.convertSet 替代常用的 stream 操作,更简洁一点;下面几个也是哈;
-        Set<Long> customerIds = pageResult.getList().stream()
-                .map(CrmBusinessDO::getCustomerId).filter(Objects::nonNull).collect(Collectors.toSet());
-        List<CrmCustomerDO> customerList = customerService.getCustomerList(customerIds, getLoginUserId());
-        // 处理商机状态类型名称回显
-        Set<Long> statusTypeIds = pageResult.getList().stream()
-                .map(CrmBusinessDO::getStatusTypeId).filter(Objects::nonNull).collect(Collectors.toSet());
-        CrmBusinessStatusTypeQueryVO queryStatusTypeVO = new CrmBusinessStatusTypeQueryVO();
-        queryStatusTypeVO.setIdList(statusTypeIds);
-        List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.selectList(queryStatusTypeVO);
-        // 处理商机状态名称回显
-        Set<Long> statusIds = pageResult.getList().stream()
-                .map(CrmBusinessDO::getStatusId).filter(Objects::nonNull).collect(Collectors.toSet());
-        CrmBusinessStatusQueryVO queryVO = new CrmBusinessStatusQueryVO();
-        queryVO.setIdList(statusIds);
-        List<CrmBusinessStatusDO> statusList = businessStatusService.selectList(queryVO);
-        return success(CrmBusinessConvert.INSTANCE.convertPage(pageResult, customerList, statusTypeList, statusList));
+        return success(buildBusinessDetailPageResult(pageResult));
     }
 
     @GetMapping("/page-by-customer")
@@ -127,24 +96,16 @@ public class CrmBusinessController {
     public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPageByCustomer(@Valid CrmBusinessPageReqVO pageReqVO) {
         Assert.notNull(pageReqVO.getCustomerId(), "客户编号不能为空");
         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPageByCustomerId(pageReqVO);
-        // 处理客户名称回显
-        // TODO @ljlleo:可以使用 CollectionUtils.convertSet 替代常用的 stream 操作,更简洁一点;下面几个也是哈;
-        Set<Long> customerIds = pageResult.getList().stream()
-                .map(CrmBusinessDO::getCustomerId).filter(Objects::nonNull).collect(Collectors.toSet());
-        List<CrmCustomerDO> customerList = customerService.getCustomerList(customerIds, getLoginUserId());
-        // 处理商机状态类型名称回显
-        Set<Long> statusTypeIds = pageResult.getList().stream()
-                .map(CrmBusinessDO::getStatusTypeId).filter(Objects::nonNull).collect(Collectors.toSet());
-        CrmBusinessStatusTypeQueryVO queryStatusTypeVO = new CrmBusinessStatusTypeQueryVO();
-        queryStatusTypeVO.setIdList(statusTypeIds);
-        List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.selectList(queryStatusTypeVO);
-        // 处理商机状态名称回显
-        Set<Long> statusIds = pageResult.getList().stream()
-                .map(CrmBusinessDO::getStatusId).filter(Objects::nonNull).collect(Collectors.toSet());
-        CrmBusinessStatusQueryVO queryVO = new CrmBusinessStatusQueryVO();
-        queryVO.setIdList(statusIds);
-        List<CrmBusinessStatusDO> statusList = businessStatusService.selectList(queryVO);
-        return success(CrmBusinessConvert.INSTANCE.convertPage(pageResult, customerList, statusTypeList, statusList));
+        return success(buildBusinessDetailPageResult(pageResult));
+    }
+
+
+    @GetMapping("/page-by-contact")
+    @Operation(summary = "获得联系人的商机分页")
+    @PreAuthorize("@ss.hasPermission('crm:business:query')")
+    public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessContactPage(@Valid CrmBusinessPageReqVO pageReqVO) {
+        PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPageByContact(pageReqVO);
+        return success(buildBusinessDetailPageResult(pageResult));
     }
 
     @GetMapping("/export-excel")
@@ -156,8 +117,21 @@ public class CrmBusinessController {
         exportReqVO.setPageSize(PAGE_SIZE_NONE);
         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(exportReqVO, getLoginUserId());
         // 导出 Excel
-        ExcelUtils.write(response, "商机.xls", "数据", CrmBusinessExcelVO.class,
-                CrmBusinessConvert.INSTANCE.convertList02(pageResult.getList()));
+        ExcelUtils.write(response, "商机.xls", "数据", CrmBusinessRespVO.class,
+                buildBusinessDetailPageResult(pageResult).getList());
+    }
+
+    private PageResult<CrmBusinessRespVO> buildBusinessDetailPageResult(PageResult<CrmBusinessDO> pageResult) {
+        if (CollUtil.isEmpty(pageResult.getList())) {
+            return PageResult.empty(pageResult.getTotal());
+        }
+        List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.getBusinessStatusTypeList(
+                convertSet(pageResult.getList(), CrmBusinessDO::getStatusTypeId));
+        List<CrmBusinessStatusDO> statusList = businessStatusService.getBusinessStatusList(
+                convertSet(pageResult.getList(), CrmBusinessDO::getStatusId));
+        List<CrmCustomerDO> customerList = customerService.getCustomerList(
+                convertSet(pageResult.getList(), CrmBusinessDO::getCustomerId));
+        return CrmBusinessConvert.INSTANCE.convertPage(pageResult, customerList, statusTypeList, statusList);
     }
 
     @PutMapping("/transfer")
@@ -167,34 +141,5 @@ public class CrmBusinessController {
         businessService.transferBusiness(reqVO, getLoginUserId());
         return success(true);
     }
-    @GetMapping("/page-by-contact")
-    @Operation(summary = "获得联系人的商机分页")
-    @PreAuthorize("@ss.hasPermission('crm:business:query')")
-    public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessContactPage(@Valid CrmContactBusinessLinkPageReqVO pageVO) {
-        PageResult<CrmBusinessRespVO> pageResult = businessService.getBusinessPageByContact(pageVO);
-        // 处理商机状态类型名称回显
-        Set<Long> statusTypeIds = pageResult.getList().stream()
-                .map(CrmBusinessRespVO::getStatusTypeId).filter(Objects::nonNull).collect(Collectors.toSet());
-        CrmBusinessStatusTypeQueryVO queryStatusTypeVO = new CrmBusinessStatusTypeQueryVO();
-        queryStatusTypeVO.setIdList(statusTypeIds);
-        List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.selectList(queryStatusTypeVO);
-        Map<Long,String> statusTypeMap = CollectionUtils.convertMap(statusTypeList,CrmBusinessStatusTypeDO::getId,CrmBusinessStatusTypeDO::getName);
-        // 处理商机状态名称回显
-        Set<Long> statusIds = pageResult.getList().stream()
-                .map(CrmBusinessRespVO::getStatusId).filter(Objects::nonNull).collect(Collectors.toSet());
-        CrmBusinessStatusQueryVO queryVO = new CrmBusinessStatusQueryVO();
-        queryVO.setIdList(statusIds);
-        List<CrmBusinessStatusDO> statusList = businessStatusService.selectList(queryVO);
-        Map<Long,String> statusMap = CollectionUtils.convertMap(statusList,CrmBusinessStatusDO::getId,CrmBusinessStatusDO::getName);
-        // 处理客户名称回显
-        Set<Long> customerIds = CollectionUtils.convertSet(pageResult.getList(),CrmBusinessRespVO::getCustomerId);
-        List<CrmCustomerDO> customerList = customerService.getCustomerList(customerIds);
-        Map<Long,String> customerMap = CollectionUtils.convertMap(customerList,CrmCustomerDO::getId,CrmCustomerDO::getName);
-        pageResult.getList().forEach(item -> {
-            item.setStatusTypeName(statusTypeMap.get(item.getStatusTypeId()));
-            item.setStatusName(statusMap.get(item.getStatusId()));
-            item.setCustomerName(customerMap.get(item.getCustomerId()));
-        });
-       return success(pageResult);
-    }
+
 }

+ 3 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessPageReqVO.java

@@ -20,6 +20,9 @@ public class CrmBusinessPageReqVO extends PageParam {
     @Schema(description = "客户编号", example = "10795")
     private Long customerId;
 
+    @Schema(description = "联系人编号", example = "10795")
+    private Long contactId;
+
     @Schema(description = "场景类型", example = "1")
     @InEnum(CrmSceneTypeEnum.class)
     private Integer sceneType; // 场景类型,为 null 时则表示全部

+ 0 - 2
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java

@@ -25,6 +25,4 @@ public class CrmBusinessRespVO extends CrmBusinessBaseVO {
     @Schema(description = "状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "跟进中")
     private String statusName;
 
-    @Schema(description = "联系人商机关联ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32129")
-    private Long businessContactId;
 }

+ 22 - 25
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/CrmContactController.java

@@ -13,7 +13,7 @@ import cn.iocoder.yudao.module.crm.convert.contact.CrmContactConvert;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
 import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants;
-import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessLinkService;
+import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessService;
 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -30,10 +30,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import javax.validation.constraints.NotEmpty;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.List;
@@ -63,7 +59,7 @@ public class CrmContactController {
     private AdminUserApi adminUserApi;
 
     @Resource
-    private CrmContactBusinessLinkService contactBusinessLinkService;
+    private CrmContactBusinessService contactBusinessLinkService;
 
     @PostMapping("/create")
     @Operation(summary = "创建联系人")
@@ -103,7 +99,7 @@ public class CrmContactController {
                 NumberUtil.parseLong(contact.getCreator()), contact.getOwnerUserId())));
         // 2. 获取客户信息
         List<CrmCustomerDO> customerList = customerService.getCustomerList(
-                Collections.singletonList(contact.getCustomerId()), getLoginUserId());
+                Collections.singletonList(contact.getCustomerId()));
         // 3. 直属上级
         List<CrmContactDO> parentContactList = contactService.getContactList(
                 Collections.singletonList(contact.getParentId()), getLoginUserId());
@@ -148,23 +144,6 @@ public class CrmContactController {
                 convertDetailContactPage(pageResult).getList());
     }
 
-    @DeleteMapping("/delete-batch-business")
-    @Operation(summary = "批量删除联系人商机关联")
-    @PreAuthorize("@ss.hasPermission('crm:contact-business-link:delete')")
-    public CommonResult<Boolean> deleteContactBusinessLinkBatch(@Valid @RequestBody List<Long> businessContactIds) {
-        contactBusinessLinkService.deleteContactBusinessLink(businessContactIds);
-        return success(true);
-    }
-
-    @PostMapping("/create-batch-business")
-    @Operation(summary = "创建联系人商机关联")
-    @PreAuthorize("@ss.hasPermission('crm:contact-business-link:create')")
-    public CommonResult<Boolean> createContactBusinessLinkBatch(
-            @Valid @NotEmpty @RequestBody List<CrmContactBusinessLinkSaveReqVO> createReqVO) {
-        contactBusinessLinkService.createContactBusinessLinkBatch(createReqVO);
-        return success(true);
-    }
-
     /**
      * 转换成详细的联系人分页,即读取关联信息
      *
@@ -178,7 +157,7 @@ public class CrmContactController {
         }
         // 1. 获取客户列表
         List<CrmCustomerDO> crmCustomerDOList = customerService.getCustomerList(
-                convertSet(contactList, CrmContactDO::getCustomerId), getLoginUserId());
+                convertSet(contactList, CrmContactDO::getCustomerId));
         // 2. 获取创建人、负责人列表
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(contactList,
                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId())));
@@ -196,4 +175,22 @@ public class CrmContactController {
         return success(true);
     }
 
+    // ================== 关联/取关商机  ===================
+
+    @PostMapping("/create-business-list")
+    @Operation(summary = "创建联系人与商机的关联")
+    @PreAuthorize("@ss.hasPermission('crm:contact:create-business')")
+    public CommonResult<Boolean> createContactBusinessList(@Valid @RequestBody CrmContactBusinessReqVO createReqVO) {
+        contactBusinessLinkService.createContactBusinessList(createReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete-business-list")
+    @Operation(summary = "删除联系人与商机的关联")
+    @PreAuthorize("@ss.hasPermission('crm:contact:delete-business')")
+    public CommonResult<Boolean> deleteContactBusinessList(@Valid @RequestBody CrmContactBusinessReqVO deleteReqVO) {
+        contactBusinessLinkService.deleteContactBusinessList(deleteReqVO);
+        return success(true);
+    }
+
 }

+ 0 - 30
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkPageReqVO.java

@@ -1,30 +0,0 @@
-package cn.iocoder.yudao.module.crm.controller.admin.contact.vo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-@Schema(description = "管理后台 - CRM 联系人商机关联分页 Request VO")
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ToString(callSuper = true)
-public class CrmContactBusinessLinkPageReqVO extends PageParam {
-
-    @Schema(description = "联系人编号", example = "20878")
-    private Long contactId;
-
-    @Schema(description = "商机编号", example = "7638")
-    private Long businessId;
-
-    @Schema(description = "创建时间")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDateTime[] createTime;
-
-}

+ 0 - 26
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkRespVO.java

@@ -1,26 +0,0 @@
-package cn.iocoder.yudao.module.crm.controller.admin.contact.vo;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - CRM 联系人商机关联 Response VO")
-@Data
-public class CrmContactBusinessLinkRespVO {
-
-    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "17220")
-    @ExcelProperty("主键")
-    private Long id;
-
-    @Schema(description = "联系人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20878")
-    private Long contactId;
-
-    @Schema(description = "商机编号", requiredMode =  Schema.RequiredMode.REQUIRED, example = "7638")
-    private Long businessId;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    private LocalDateTime createTime;
-
-}

+ 0 - 23
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkSaveReqVO.java

@@ -1,23 +0,0 @@
-package cn.iocoder.yudao.module.crm.controller.admin.contact.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import jakarta.validation.constraints.NotNull;
-
-@Schema(description = "管理后台 - CRM 联系人商机关联新增/修改 Request VO")
-@Data
-public class CrmContactBusinessLinkSaveReqVO {
-
-    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "17220")
-    private Long id;
-
-    @Schema(description = "联系人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20878")
-    @NotNull(message="联系人不能为空")
-    private Long contactId;
-
-    @Schema(description = "商机编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7638")
-    @NotNull(message="商机不能为空")
-    private Long businessId;
-
-}

+ 22 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessReqVO.java

@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.crm.controller.admin.contact.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - CRM 联系人商机 Request VO") // 用于关联,取消关联的操作
+@Data
+public class CrmContactBusinessReqVO {
+
+    @Schema(description = "联系人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20878")
+    @NotNull(message="联系人不能为空")
+    private Long contactId;
+
+    @Schema(description = "商机编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "7638")
+    @NotEmpty(message="商机不能为空")
+    private List<Long> businessIds;
+
+}

+ 0 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contactbusinesslink/CrmContactBusinessLinkController.java


+ 1 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java

@@ -124,7 +124,7 @@ public class CrmContractController {
         }
         // 1. 获取客户列表
         List<CrmCustomerDO> customerList = customerService.getCustomerList(
-                convertSet(contactList, CrmContractDO::getCustomerId), getLoginUserId());
+                convertSet(contactList, CrmContractDO::getCustomerId));
         // 2. 获取创建人、负责人列表
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(contactList,
                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId())));

+ 1 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java

@@ -131,7 +131,7 @@ public class CrmReceivableController {
         }
         // 1. 获取客户列表
         List<CrmCustomerDO> customerList = customerService.getCustomerList(
-                convertSet(receivableList, CrmReceivableDO::getCustomerId), getLoginUserId());
+                convertSet(receivableList, CrmReceivableDO::getCustomerId));
         // 2. 获取创建人、负责人列表
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(receivableList,
                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId())));

+ 1 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivablePlanController.java

@@ -135,7 +135,7 @@ public class CrmReceivablePlanController {
         }
         // 1. 获取客户列表
         List<CrmCustomerDO> customerList = customerService.getCustomerList(
-                convertSet(receivablePlanList, CrmReceivablePlanDO::getCustomerId), getLoginUserId());
+                convertSet(receivablePlanList, CrmReceivablePlanDO::getCustomerId));
         // 2. 获取创建人、负责人列表
         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(receivablePlanList,
                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId())));

+ 7 - 7
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/CrmContactConvert.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.crm.convert.contact;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
@@ -13,7 +14,6 @@ import org.mapstruct.factory.Mappers;
 
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
 import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
@@ -55,16 +55,16 @@ public interface CrmContactConvert {
      *
      * @param contactDO         联系人
      * @param userMap           用户列表
-     * @param crmCustomerDOList 客户
+     * @param customerDOList 客户
      * @return ContactRespVO
      */
-    default CrmContactRespVO convert(CrmContactDO contactDO, Map<Long, AdminUserRespDTO> userMap, List<CrmCustomerDO> crmCustomerDOList,
-                                     List<CrmContactDO> contactList) {
+    default CrmContactRespVO convert(CrmContactDO contactDO, Map<Long, AdminUserRespDTO> userMap,
+                                     List<CrmCustomerDO> customerDOList, List<CrmContactDO> contactList) {
         CrmContactRespVO contactVO = convert(contactDO);
         setUserInfo(contactVO, userMap);
-        Map<Long, CrmCustomerDO> ustomerMap = crmCustomerDOList.stream().collect(Collectors.toMap(CrmCustomerDO::getId, v -> v));
-        Map<Long, CrmContactDO> contactMap = contactList.stream().collect(Collectors.toMap(CrmContactDO::getId, v -> v));
-        findAndThen(ustomerMap, contactDO.getCustomerId(), customer -> contactVO.setCustomerName(customer.getName()));
+        Map<Long, CrmCustomerDO> customerMap = CollectionUtils.convertMap(customerDOList, CrmCustomerDO::getId);
+        Map<Long, CrmContactDO> contactMap = CollectionUtils.convertMap(contactList, CrmContactDO::getId);
+        findAndThen(customerMap, contactDO.getCustomerId(), customer -> contactVO.setCustomerName(customer.getName()));
         findAndThen(contactMap, contactDO.getParentId(), contact -> contactVO.setParentName(contact.getName()));
         return contactVO;
     }

+ 2 - 3
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/CrmContactBusinessLinkDO.java → yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/CrmContactBusinessDO.java

@@ -2,14 +2,13 @@ package cn.iocoder.yudao.module.crm.dal.dataobject.contact;
 
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
 import com.baomidou.mybatisplus.annotation.KeySequence;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
 /**
- * CRM 联系人商机关联 DO
+ * CRM 联系人商机关联 DO
  *
  * @author 芋道源码
  */
@@ -21,7 +20,7 @@ import lombok.*;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class CrmContactBusinessLinkDO extends BaseDO {
+public class CrmContactBusinessDO extends BaseDO {
 
     /**
      * 主键

+ 8 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/business/CrmBusinessMapper.java

@@ -30,7 +30,14 @@ public interface CrmBusinessMapper extends BaseMapperX<CrmBusinessDO> {
 
     default PageResult<CrmBusinessDO> selectPageByCustomerId(CrmBusinessPageReqVO pageReqVO) {
         return selectPage(pageReqVO, new LambdaQueryWrapperX<CrmBusinessDO>()
-                .eq(CrmBusinessDO::getCustomerId, pageReqVO.getCustomerId())  // 指定客户编号
+                .eq(CrmBusinessDO::getCustomerId, pageReqVO.getCustomerId()) // 指定客户编号
+                .likeIfPresent(CrmBusinessDO::getName, pageReqVO.getName())
+                .orderByDesc(CrmBusinessDO::getId));
+    }
+
+    default PageResult<CrmBusinessDO> selectPageByContactId(CrmBusinessPageReqVO pageReqVO, Collection<Long> businessIds) {
+        return selectPage(pageReqVO, new LambdaQueryWrapperX<CrmBusinessDO>()
+                .in(CrmBusinessDO::getId, businessIds) // 指定商机编号
                 .likeIfPresent(CrmBusinessDO::getName, pageReqVO.getName())
                 .orderByDesc(CrmBusinessDO::getId));
     }

+ 0 - 30
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contactbusinesslink/CrmContactBusinessLinkMapper.java

@@ -1,30 +0,0 @@
-package cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * CRM 联系人商机关联 Mapper
- *
- * @author 芋道源码
- */
-@Mapper
-public interface CrmContactBusinessLinkMapper extends BaseMapperX<CrmContactBusinessLinkDO> {
-
-    default PageResult<CrmContactBusinessLinkDO> selectPage(CrmContactBusinessLinkPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<CrmContactBusinessLinkDO>()
-                .eqIfPresent(CrmContactBusinessLinkDO::getContactId, reqVO.getContactId())
-                .eqIfPresent(CrmContactBusinessLinkDO::getBusinessId, reqVO.getBusinessId())
-                .betweenIfPresent(CrmContactBusinessLinkDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(CrmContactBusinessLinkDO::getId));
-    }
-    default PageResult<CrmContactBusinessLinkDO> selectPageByContact(CrmContactBusinessLinkPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<CrmContactBusinessLinkDO>()
-                .eqIfPresent(CrmContactBusinessLinkDO::getContactId, reqVO.getContactId())
-                .orderByDesc(CrmContactBusinessLinkDO::getId));
-    }
-}

+ 34 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contactbusinesslink/CrmContactBusinessMapper.java

@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink;
+
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * CRM 联系人与商机的关联 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface CrmContactBusinessMapper extends BaseMapperX<CrmContactBusinessDO> {
+
+    default CrmContactBusinessDO selectByContactIdAndBusinessId(Long contactId, Long businessId) {
+        return selectOne(CrmContactBusinessDO::getContactId, contactId,
+                CrmContactBusinessDO::getBusinessId, businessId);
+    }
+
+    default void deleteByContactIdAndBusinessId(Long contactId, Collection<Long> businessIds) {
+        delete(new LambdaQueryWrapper<CrmContactBusinessDO>()
+                .eq(CrmContactBusinessDO::getContactId, contactId)
+                .in(CrmContactBusinessDO::getBusinessId, businessIds));
+    }
+
+    default List<CrmContactBusinessDO> selectListByContactId(Long contactId) {
+        return selectList(CrmContactBusinessDO::getContactId, contactId);
+    }
+
+}

+ 12 - 10
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java

@@ -5,10 +5,8 @@ import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusi
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessUpdateReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO;
 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.customer.CrmCustomerDO;
 import jakarta.validation.Valid;
 
@@ -78,10 +76,20 @@ public interface CrmBusinessService {
      * 数据权限:基于 {@link CrmCustomerDO} 读取
      *
      * @param pageReqVO 分页查询
-     * @return 联系人分页
+     * @return 商机分页
      */
     PageResult<CrmBusinessDO> getBusinessPageByCustomerId(CrmBusinessPageReqVO pageReqVO);
 
+    /**
+     * 获得商机分页,基于指定联系人
+     *
+     * 数据权限:基于 {@link CrmContactDO} 读取
+     *
+     * @param pageReqVO 分页参数
+     * @return 商机分页
+     */
+    PageResult<CrmBusinessDO> getBusinessPageByContact(CrmBusinessPageReqVO pageReqVO);
+
     /**
      * 商机转移
      *
@@ -90,10 +98,4 @@ public interface CrmBusinessService {
      */
     void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId);
 
-    /**
-     * 获取联系人商机列表
-     * @param pageReqVO 分页参数
-     * @return 联系人商机
-     */
-    PageResult<CrmBusinessRespVO> getBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO);
 }

+ 24 - 42
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java

@@ -7,20 +7,14 @@ import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusi
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessUpdateReqVO;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO;
 import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert;
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
 import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper;
 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
-import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
+import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessService;
 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
@@ -31,10 +25,9 @@ import org.springframework.validation.annotation.Validated;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS;
 
 /**
@@ -48,14 +41,13 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
 
     @Resource
     private CrmBusinessMapper businessMapper;
-    @Resource
-    private CrmCustomerService customerService;
 
     @Resource
-    private CrmPermissionService crmPermissionService;
-
+    private CrmPermissionService permissionService;
     @Resource
-    private CrmContactService crmContactService;
+    private CrmContactService contactService;
+    @Resource
+    private CrmContactBusinessService contactBusinessService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -65,7 +57,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         businessMapper.insert(business);
 
         // 创建数据权限
-        crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType())
+        permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType())
                 .setBizId(business.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
 
         // 返回
@@ -93,7 +85,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         // 删除
         businessMapper.deleteById(id);
         // 删除数据权限
-        crmPermissionService.deletePermission(CrmBizTypeEnum.CRM_BUSINESS.getType(), id);
+        permissionService.deletePermission(CrmBizTypeEnum.CRM_BUSINESS.getType(), id);
     }
 
     private CrmBusinessDO validateBusinessExists(Long id) {
@@ -129,6 +121,20 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         return businessMapper.selectPageByCustomerId(pageReqVO);
     }
 
+    @Override
+    @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACT, bizId = "#pageReqVO.contactId", level = CrmPermissionLevelEnum.READ)
+    public PageResult<CrmBusinessDO> getBusinessPageByContact(CrmBusinessPageReqVO pageReqVO) {
+        // 1. 查询关联的商机编号
+        List<CrmContactBusinessDO> contactBusinessList = contactBusinessService.getContactBusinessListByContactId(
+                pageReqVO.getContactId());
+        if (CollUtil.isEmpty(contactBusinessList)) {
+            return PageResult.empty();
+        }
+        // 2. 查询商机分页
+        return businessMapper.selectPageByContactId(pageReqVO,
+                convertSet(contactBusinessList, CrmContactBusinessDO::getBusinessId));
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId) {
@@ -136,36 +142,12 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         validateBusinessExists(reqVO.getId());
 
         // 2.1 数据权限转移
-        crmPermissionService.transferPermission(
+        permissionService.transferPermission(
                 CrmBusinessConvert.INSTANCE.convert(reqVO, userId).setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType()));
         // 2.2 设置新的负责人
         businessMapper.updateOwnerUserIdById(reqVO.getId(), reqVO.getNewOwnerUserId());
 
         // 3. TODO 记录转移日志
     }
-    @Override
-    public PageResult<CrmBusinessRespVO> getBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO) {
-        CrmContactBusinessLinkPageReqVO crmContactBusinessLinkPageReqVO = new CrmContactBusinessLinkPageReqVO();
-        crmContactBusinessLinkPageReqVO.setContactId(pageReqVO.getContactId());
-        PageResult<CrmContactBusinessLinkDO> businessLinkDOS = crmContactService.selectBusinessPageByContact(crmContactBusinessLinkPageReqVO);
-        if (CollUtil.isEmpty(businessLinkDOS.getList())){
-            return PageResult.empty();
-        }
-        List<CrmBusinessDO> businessList = this.getBusinessList(CollectionUtils.convertList(businessLinkDOS.getList(),
-                CrmContactBusinessLinkDO::getBusinessId));
-        if (CollUtil.isEmpty(businessList)){
-            return PageResult.empty();
-        }
-        PageResult<CrmBusinessRespVO> pageResult = new PageResult<CrmBusinessRespVO>();
-        List<CrmBusinessRespVO> respVOList = BeanUtils.toBean(businessList,CrmBusinessRespVO.class);
-        Map<Long,Long> businessContactMap = CollectionUtils.convertMap(businessLinkDOS.getList(),
-                CrmContactBusinessLinkDO::getBusinessId,CrmContactBusinessLinkDO::getId);
-        respVOList.forEach(item -> {
-            item.setBusinessContactId(businessContactMap.get(item.getId()));
-        });
-        pageResult.setList(respVOList);
-        pageResult.setTotal(businessLinkDOS.getTotal());
-        return pageResult;
 
-    }
 }

+ 10 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessStatusService.java

@@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusine
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO;
 
 import jakarta.validation.Valid;
+
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -64,4 +66,12 @@ public interface CrmBusinessStatusService {
      */
     List<CrmBusinessStatusDO> selectList(CrmBusinessStatusQueryVO queryVO);
 
+    /**
+     * 获得商机状态列表
+     *
+     * @param ids 编号数组
+     * @return 商机状态列表
+     */
+    List<CrmBusinessStatusDO> getBusinessStatusList(Collection<Long> ids);
+
 }

+ 6 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessStatusServiceImpl.java

@@ -12,6 +12,7 @@ import org.springframework.validation.annotation.Validated;
 
 import jakarta.annotation.Resource;
 
+import java.util.Collection;
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -77,4 +78,9 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
         return businessStatusMapper.selectList(queryVO);
     }
 
+    @Override
+    public List<CrmBusinessStatusDO> getBusinessStatusList(Collection<Long> ids) {
+        return businessStatusMapper.selectBatchIds(ids);
+    }
+
 }

+ 10 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessStatusTypeService.java

@@ -5,8 +5,9 @@ import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusiness
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO;
 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO;
-
 import jakarta.validation.Valid;
+
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -63,4 +64,12 @@ public interface CrmBusinessStatusTypeService {
      */
     List<CrmBusinessStatusTypeDO> selectList(CrmBusinessStatusTypeQueryVO queryVO);
 
+    /**
+     * 获得商机状态类型列表
+     *
+     * @param ids 编号数组
+     * @return 商机状态类型列表
+     */
+    List<CrmBusinessStatusTypeDO> getBusinessStatusTypeList(Collection<Long> ids);
+
 }

+ 7 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessStatusTypeServiceImpl.java

@@ -17,6 +17,8 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import jakarta.annotation.Resource;
+
+import java.util.Collection;
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -118,4 +120,9 @@ public class CrmBusinessStatusTypeServiceImpl implements CrmBusinessStatusTypeSe
         return businessStatusTypeMapper.selectList(queryVO);
     }
 
+    @Override
+    public List<CrmBusinessStatusTypeDO> getBusinessStatusTypeList(Collection<Long> ids) {
+        return businessStatusTypeMapper.selectBatchIds(ids);
+    }
+
 }

+ 0 - 72
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkService.java

@@ -1,72 +0,0 @@
-package cn.iocoder.yudao.module.crm.service.contact;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkSaveReqVO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
-
-import jakarta.validation.Valid;
-import java.util.List;
-
-/**
- * CRM 联系人商机关联 Service 接口
- *
- * @author 芋道源码
- */
-public interface CrmContactBusinessLinkService {
-
-    /**
-     * 创建联系人商机关联
-     *
-     * @param createReqVO 创建信息
-     * @return 编号
-     */
-    Long createContactBusinessLink(@Valid CrmContactBusinessLinkSaveReqVO createReqVO);
-
-    /**
-     * 创建联系人商机关联
-     *
-     * @param createReqVO 创建信息
-     */
-    void createContactBusinessLinkBatch(@Valid List<CrmContactBusinessLinkSaveReqVO> createReqVO);
-
-    /**
-     * 更新联系人商机关联
-     *
-     * @param updateReqVO 更新信息
-     */
-    void updateContactBusinessLink(@Valid CrmContactBusinessLinkSaveReqVO updateReqVO);
-
-    /**
-     * 删除联系人商机关联
-     *
-     * @param businessContactIds  删除列表
-     */
-    void deleteContactBusinessLink(@Valid List<Long> businessContactIds);
-
-    /**
-     * 获得联系人商机关联
-     *
-     * @param id 编号
-     * @return 联系人商机关联
-     */
-    CrmContactBusinessLinkDO getContactBusinessLink(Long id);
-
-    /**
-     * 获得联系人商机关联分页
-     *
-     * @param pageReqVO 编号
-     * @return 联系人商机关联
-     */
-    PageResult<CrmBusinessRespVO> getContactBusinessLinkPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO);
-
-    /**
-     * 获得联系人商机关联分页
-     *
-     * @param pageReqVO 分页查询
-     * @return 联系人商机关联分页
-     */
-    PageResult<CrmContactBusinessLinkDO> getContactBusinessLinkPage(CrmContactBusinessLinkPageReqVO pageReqVO);
-
-}

+ 0 - 129
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkServiceImpl.java

@@ -1,129 +0,0 @@
-package cn.iocoder.yudao.module.crm.service.contact;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.lang.Assert;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkSaveReqVO;
-import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert;
-import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
-import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessLinkMapper;
-import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
-import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
-import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission;
-import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants;
-import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
-import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-
-import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
-import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS;
-import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTACT_BUSINESS_LINK_NOT_EXISTS;
-
-// TODO @puhui999:数据权限的校验;每个操作;
-/**
- * 联系人商机关联 Service 实现类
- *
- * @author 芋道源码
- */
-@Service
-@Validated
-public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLinkService {
-
-    @Resource
-    private CrmContactBusinessLinkMapper contactBusinessLinkMapper;
-    @Resource
-    private CrmBusinessService crmBusinessService;
-
-    @Resource
-    private CrmContactService crmContactService;
-
-    @Override
-    public Long createContactBusinessLink(CrmContactBusinessLinkSaveReqVO createReqVO) {
-        CrmContactBusinessLinkDO contactBusinessLink = BeanUtils.toBean(createReqVO, CrmContactBusinessLinkDO.class);
-        contactBusinessLinkMapper.insert(contactBusinessLink);
-        return contactBusinessLink.getId();
-    }
-
-    @Override
-    public void createContactBusinessLinkBatch(List<CrmContactBusinessLinkSaveReqVO> createReqVOList) {
-        // 插入
-        CrmContactDO contactDO = crmContactService.getContact(createReqVOList.stream().findFirst().get().getContactId());
-        Assert.notNull(contactDO,ErrorCodeConstants.CONTACT_NOT_EXISTS.getMsg());
-        List<CrmContactBusinessLinkDO> saveDoList = new ArrayList<CrmContactBusinessLinkDO>();
-        createReqVOList.forEach(item -> {
-            CrmBusinessDO crmBusinessDO = crmBusinessService.getBusiness(item.getBusinessId());
-            if(crmBusinessDO == null){
-                throw exception(BUSINESS_NOT_EXISTS);
-            }
-            // 判重
-            CrmContactBusinessLinkDO crmContactBusinessLinkDO = contactBusinessLinkMapper.selectOne(new LambdaQueryWrapper<CrmContactBusinessLinkDO>()
-                    .eq(CrmContactBusinessLinkDO::getBusinessId,item.getBusinessId())
-                    .eq(CrmContactBusinessLinkDO::getContactId,item.getContactId()));
-            if(crmContactBusinessLinkDO == null){
-                saveDoList.add(BeanUtils.toBean(item,CrmContactBusinessLinkDO.class));
-            }
-        });
-        contactBusinessLinkMapper.insertBatch(saveDoList);
-    }
-
-    @Override
-    public void updateContactBusinessLink(CrmContactBusinessLinkSaveReqVO updateReqVO) {
-        // 校验存在
-        validateContactBusinessLinkExists(updateReqVO.getId());
-        // 更新
-        CrmContactBusinessLinkDO updateObj = BeanUtils.toBean(updateReqVO, CrmContactBusinessLinkDO.class);
-        contactBusinessLinkMapper.updateById(updateObj);
-    }
-
-    @Override
-    public void deleteContactBusinessLink(List<Long> businessContactIds) {
-        // 删除
-        contactBusinessLinkMapper.deleteBatchIds(businessContactIds);
-    }
-
-    private void validateContactBusinessLinkExists(Long id) {
-        if (contactBusinessLinkMapper.selectById(id) == null) {
-            throw exception(CONTACT_BUSINESS_LINK_NOT_EXISTS);
-        }
-    }
-
-    @Override
-    @CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#id", level = CrmPermissionLevelEnum.READ)
-    public CrmContactBusinessLinkDO getContactBusinessLink(Long id) {
-        return contactBusinessLinkMapper.selectById(id);
-    }
-
-    @Override
-    public PageResult<CrmBusinessRespVO> getContactBusinessLinkPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO) {
-        CrmContactBusinessLinkPageReqVO crmContactBusinessLinkPageReqVO = new CrmContactBusinessLinkPageReqVO();
-        crmContactBusinessLinkPageReqVO.setContactId(pageReqVO.getContactId());
-        PageResult<CrmContactBusinessLinkDO> businessLinkDOS = contactBusinessLinkMapper.selectPageByContact(crmContactBusinessLinkPageReqVO);
-        List<CrmBusinessDO> businessDOS = crmBusinessService.getBusinessList(CollectionUtils.convertList(businessLinkDOS.getList(),
-                CrmContactBusinessLinkDO::getBusinessId), getLoginUserId());
-        PageResult<CrmBusinessRespVO> pageResult = new PageResult<CrmBusinessRespVO>();
-        pageResult.setList(CrmBusinessConvert.INSTANCE.convert(businessDOS));
-        pageResult.setTotal(businessLinkDOS.getTotal());
-        return pageResult;
-
-    }
-
-    @Override
-    public PageResult<CrmContactBusinessLinkDO> getContactBusinessLinkPage(CrmContactBusinessLinkPageReqVO pageReqVO) {
-        return contactBusinessLinkMapper.selectPage(pageReqVO);
-    }
-
-}

+ 38 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessService.java

@@ -0,0 +1,38 @@
+package cn.iocoder.yudao.module.crm.service.contact;
+
+import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessReqVO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
+import jakarta.validation.Valid;
+
+import java.util.List;
+
+/**
+ * CRM 联系人与商机的关联 Service 接口
+ *
+ * @author 芋道源码
+ */
+public interface CrmContactBusinessService {
+
+    /**
+     * 创建联系人与商机的关联
+     *
+     * @param createReqVO 创建信息
+     */
+    void createContactBusinessList(@Valid CrmContactBusinessReqVO createReqVO);
+
+    /**
+     * 删除联系人与商机的关联
+     *
+     * @param deleteReqVO 删除信息
+     */
+    void deleteContactBusinessList(@Valid CrmContactBusinessReqVO deleteReqVO);
+
+    /**
+     * 获得联系人与商机的关联列表,基于联系人编号
+     *
+     * @param contactId 联系人编号
+     * @return 联系人商机关联
+     */
+    List<CrmContactBusinessDO> getContactBusinessListByContactId(Long contactId);
+
+}

+ 83 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessServiceImpl.java

@@ -0,0 +1,83 @@
+package cn.iocoder.yudao.module.crm.service.contact;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessReqVO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
+import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessMapper;
+import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
+import jakarta.annotation.Resource;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS;
+import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTACT_NOT_EXISTS;
+
+// TODO @puhui999:数据权限的校验;每个操作;
+/**
+ * 联系人与商机的关联 Service 实现类
+ *
+ * @author 芋道源码
+ */
+@Service
+@Validated
+public class CrmContactBusinessServiceImpl implements CrmContactBusinessService {
+
+    @Resource
+    private CrmContactBusinessMapper contactBusinessMapper;
+
+    @Resource
+    @Lazy // 延迟加载,为了解决延迟加载
+    private CrmBusinessService businessService;
+    @Resource
+    @Lazy // 延迟加载,为了解决延迟加载
+    private CrmContactService contactService;
+
+    @Override
+    public void createContactBusinessList(CrmContactBusinessReqVO createReqVO) {
+        CrmContactDO contact = contactService.getContact(createReqVO.getContactId());
+        if (contact == null) {
+            throw exception(CONTACT_NOT_EXISTS);
+        }
+        // 遍历处理,考虑到一般数量不会太多,代码处理简单
+        List<CrmContactBusinessDO> saveDOList = new ArrayList<>();
+        createReqVO.getBusinessIds().forEach(businessId -> {
+            CrmBusinessDO business = businessService.getBusiness(businessId);
+            if (business == null) {
+                throw exception(BUSINESS_NOT_EXISTS);
+            }
+            // 关联判重
+            if (contactBusinessMapper.selectByContactIdAndBusinessId(createReqVO.getContactId(), businessId) != null) {
+                return;
+            }
+            saveDOList.add(new CrmContactBusinessDO(null, createReqVO.getContactId(), businessId));
+        });
+        // 批量插入
+        if (CollUtil.isNotEmpty(saveDOList)) {
+            contactBusinessMapper.insertBatch(saveDOList);
+        }
+    }
+
+    @Override
+    public void deleteContactBusinessList(CrmContactBusinessReqVO deleteReqVO) {
+        CrmContactDO contact = contactService.getContact(deleteReqVO.getContactId());
+        if (contact == null) {
+            throw exception(CONTACT_NOT_EXISTS);
+        }
+        // 直接删除
+        contactBusinessMapper.deleteByContactIdAndBusinessId(
+                deleteReqVO.getContactId(), deleteReqVO.getBusinessIds());
+    }
+
+    @Override
+    public List<CrmContactBusinessDO> getContactBusinessListByContactId(Long contactId) {
+        return contactBusinessMapper.selectListByContactId(contactId);
+    }
+
+}

+ 0 - 10
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactService.java

@@ -1,12 +1,10 @@
 package cn.iocoder.yudao.module.crm.service.contact;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactCreateReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactTransferReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactUpdateReqVO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
 import jakarta.validation.Valid;
@@ -90,12 +88,4 @@ public interface CrmContactService {
      */
     void transferContact(CrmContactTransferReqVO reqVO, Long userId);
 
-
-    /**
-     * 获取联系人商机关联分页列表
-     * @param reqVO 联系人
-     * @return 商机联系人关联列表
-     */
-    PageResult<CrmContactBusinessLinkDO> selectBusinessPageByContact(CrmContactBusinessLinkPageReqVO reqVO);
-
 }

+ 3 - 18
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactServiceImpl.java

@@ -5,17 +5,9 @@ import cn.hutool.core.collection.ListUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*;
 import cn.iocoder.yudao.module.crm.convert.contact.CrmContactConvert;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
-import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO;
-import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*;
-import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert;
-import cn.iocoder.yudao.module.crm.convert.contact.ContactConvert;
-import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
 import cn.iocoder.yudao.module.crm.dal.mysql.contact.CrmContactMapper;
-import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessLinkMapper;
-import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission;
+import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessMapper;
 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
@@ -56,7 +48,7 @@ public class CrmContactServiceImpl implements CrmContactService {
     private AdminUserApi adminUserApi;
 
     @Resource
-    private CrmContactBusinessLinkMapper contactBusinessLinkMapper;
+    private CrmContactBusinessMapper contactBusinessLinkMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -161,11 +153,4 @@ public class CrmContactServiceImpl implements CrmContactService {
         // 3. TODO 记录转移日志
     }
 
-    @Override
-    public PageResult<CrmContactBusinessLinkDO> selectBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO) {
-        CrmContactBusinessLinkPageReqVO crmContactBusinessLinkPageReqVO = new CrmContactBusinessLinkPageReqVO();
-        crmContactBusinessLinkPageReqVO.setContactId(pageReqVO.getContactId());
-        return contactBusinessLinkMapper.selectPageByContact(crmContactBusinessLinkPageReqVO);
-
-    }
-}
+}

+ 1 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java

@@ -56,7 +56,7 @@ public interface CrmCustomerService {
      * @return 客户列表
      * @author ljlleo
      */
-    List<CrmCustomerDO> getCustomerList(Collection<Long> ids, Long userId);
+    List<CrmCustomerDO> getCustomerList(Collection<Long> ids);
 
     /**
      * 获得客户分页

+ 2 - 2
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java

@@ -116,11 +116,11 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
     }
 
     @Override
-    public List<CrmCustomerDO> getCustomerList(Collection<Long> ids, Long userId) {
+    public List<CrmCustomerDO> getCustomerList(Collection<Long> ids) {
         if (CollUtil.isEmpty(ids)) {
             return Collections.emptyList();
         }
-        return customerMapper.selectBatchIds(ids, userId);
+        return customerMapper.selectBatchIds(ids);
     }
 
     @Override