Commit 9e3055ee1ee2ef043bbb24314a87df11002c09d6

Authored by YunaiV
1 parent 2d053738

📖 CRM:code review 商机模块

Showing 31 changed files with 312 additions and 505 deletions
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 {
24 24 // ========== 联系人管理 1-020-003-000 ==========
25 25 ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_020_003_000, "联系人不存在");
26 26 ErrorCode CONTACT_BUSINESS_LINK_NOT_EXISTS = new ErrorCode( 1_020_003_001, "联系人商机关联不存在");
27   - ErrorCode CONTACT_BUSINESS_LINK_CREATE_EMPTY = new ErrorCode( 1_020_003_002, "联系人商机关联参数为空");
  27 +
28 28 // ========== 回款 1-020-004-000 ==========
29 29 ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_020_004_000, "回款不存在");
30 30  
... ...
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;
4 4 import cn.hutool.core.lang.Assert;
5 5 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
8 7 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
9 8 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
10 9 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*;
11   -import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO;
12   -import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO;
13   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
14   -import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO;
15 10 import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert;
16 11 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
17 12 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO;
... ... @@ -33,13 +28,10 @@ import org.springframework.web.bind.annotation.*;
33 28  
34 29 import java.io.IOException;
35 30 import java.util.List;
36   -import java.util.Map;
37   -import java.util.Objects;
38   -import java.util.Set;
39   -import java.util.stream.Collectors;
40 31  
41 32 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
42 33 import static cn.iocoder.yudao.framework.common.pojo.PageParam.PAGE_SIZE_NONE;
  34 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
43 35 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
44 36 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
45 37  
... ... @@ -51,13 +43,10 @@ public class CrmBusinessController {
51 43  
52 44 @Resource
53 45 private CrmBusinessService businessService;
54   -
55 46 @Resource
56 47 private CrmCustomerService customerService;
57   -
58 48 @Resource
59 49 private CrmBusinessStatusTypeService businessStatusTypeService;
60   -
61 50 @Resource
62 51 private CrmBusinessStatusService businessStatusService;
63 52  
... ... @@ -99,27 +88,7 @@ public class CrmBusinessController {
99 88 @PreAuthorize("@ss.hasPermission('crm:business:query')")
100 89 public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPage(@Valid CrmBusinessPageReqVO pageVO) {
101 90 PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(pageVO, getLoginUserId());
102   - if (CollUtil.isEmpty(pageResult.getList())) {
103   - return success(PageResult.empty(pageResult.getTotal()));
104   - }
105   - // 处理客户名称回显
106   - // TODO @ljlleo:可以使用 CollectionUtils.convertSet 替代常用的 stream 操作,更简洁一点;下面几个也是哈;
107   - Set<Long> customerIds = pageResult.getList().stream()
108   - .map(CrmBusinessDO::getCustomerId).filter(Objects::nonNull).collect(Collectors.toSet());
109   - List<CrmCustomerDO> customerList = customerService.getCustomerList(customerIds, getLoginUserId());
110   - // 处理商机状态类型名称回显
111   - Set<Long> statusTypeIds = pageResult.getList().stream()
112   - .map(CrmBusinessDO::getStatusTypeId).filter(Objects::nonNull).collect(Collectors.toSet());
113   - CrmBusinessStatusTypeQueryVO queryStatusTypeVO = new CrmBusinessStatusTypeQueryVO();
114   - queryStatusTypeVO.setIdList(statusTypeIds);
115   - List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.selectList(queryStatusTypeVO);
116   - // 处理商机状态名称回显
117   - Set<Long> statusIds = pageResult.getList().stream()
118   - .map(CrmBusinessDO::getStatusId).filter(Objects::nonNull).collect(Collectors.toSet());
119   - CrmBusinessStatusQueryVO queryVO = new CrmBusinessStatusQueryVO();
120   - queryVO.setIdList(statusIds);
121   - List<CrmBusinessStatusDO> statusList = businessStatusService.selectList(queryVO);
122   - return success(CrmBusinessConvert.INSTANCE.convertPage(pageResult, customerList, statusTypeList, statusList));
  91 + return success(buildBusinessDetailPageResult(pageResult));
123 92 }
124 93  
125 94 @GetMapping("/page-by-customer")
... ... @@ -127,24 +96,16 @@ public class CrmBusinessController {
127 96 public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPageByCustomer(@Valid CrmBusinessPageReqVO pageReqVO) {
128 97 Assert.notNull(pageReqVO.getCustomerId(), "客户编号不能为空");
129 98 PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPageByCustomerId(pageReqVO);
130   - // 处理客户名称回显
131   - // TODO @ljlleo:可以使用 CollectionUtils.convertSet 替代常用的 stream 操作,更简洁一点;下面几个也是哈;
132   - Set<Long> customerIds = pageResult.getList().stream()
133   - .map(CrmBusinessDO::getCustomerId).filter(Objects::nonNull).collect(Collectors.toSet());
134   - List<CrmCustomerDO> customerList = customerService.getCustomerList(customerIds, getLoginUserId());
135   - // 处理商机状态类型名称回显
136   - Set<Long> statusTypeIds = pageResult.getList().stream()
137   - .map(CrmBusinessDO::getStatusTypeId).filter(Objects::nonNull).collect(Collectors.toSet());
138   - CrmBusinessStatusTypeQueryVO queryStatusTypeVO = new CrmBusinessStatusTypeQueryVO();
139   - queryStatusTypeVO.setIdList(statusTypeIds);
140   - List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.selectList(queryStatusTypeVO);
141   - // 处理商机状态名称回显
142   - Set<Long> statusIds = pageResult.getList().stream()
143   - .map(CrmBusinessDO::getStatusId).filter(Objects::nonNull).collect(Collectors.toSet());
144   - CrmBusinessStatusQueryVO queryVO = new CrmBusinessStatusQueryVO();
145   - queryVO.setIdList(statusIds);
146   - List<CrmBusinessStatusDO> statusList = businessStatusService.selectList(queryVO);
147   - return success(CrmBusinessConvert.INSTANCE.convertPage(pageResult, customerList, statusTypeList, statusList));
  99 + return success(buildBusinessDetailPageResult(pageResult));
  100 + }
  101 +
  102 +
  103 + @GetMapping("/page-by-contact")
  104 + @Operation(summary = "获得联系人的商机分页")
  105 + @PreAuthorize("@ss.hasPermission('crm:business:query')")
  106 + public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessContactPage(@Valid CrmBusinessPageReqVO pageReqVO) {
  107 + PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPageByContact(pageReqVO);
  108 + return success(buildBusinessDetailPageResult(pageResult));
148 109 }
149 110  
150 111 @GetMapping("/export-excel")
... ... @@ -156,8 +117,21 @@ public class CrmBusinessController {
156 117 exportReqVO.setPageSize(PAGE_SIZE_NONE);
157 118 PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(exportReqVO, getLoginUserId());
158 119 // 导出 Excel
159   - ExcelUtils.write(response, "商机.xls", "数据", CrmBusinessExcelVO.class,
160   - CrmBusinessConvert.INSTANCE.convertList02(pageResult.getList()));
  120 + ExcelUtils.write(response, "商机.xls", "数据", CrmBusinessRespVO.class,
  121 + buildBusinessDetailPageResult(pageResult).getList());
  122 + }
  123 +
  124 + private PageResult<CrmBusinessRespVO> buildBusinessDetailPageResult(PageResult<CrmBusinessDO> pageResult) {
  125 + if (CollUtil.isEmpty(pageResult.getList())) {
  126 + return PageResult.empty(pageResult.getTotal());
  127 + }
  128 + List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.getBusinessStatusTypeList(
  129 + convertSet(pageResult.getList(), CrmBusinessDO::getStatusTypeId));
  130 + List<CrmBusinessStatusDO> statusList = businessStatusService.getBusinessStatusList(
  131 + convertSet(pageResult.getList(), CrmBusinessDO::getStatusId));
  132 + List<CrmCustomerDO> customerList = customerService.getCustomerList(
  133 + convertSet(pageResult.getList(), CrmBusinessDO::getCustomerId));
  134 + return CrmBusinessConvert.INSTANCE.convertPage(pageResult, customerList, statusTypeList, statusList);
161 135 }
162 136  
163 137 @PutMapping("/transfer")
... ... @@ -167,34 +141,5 @@ public class CrmBusinessController {
167 141 businessService.transferBusiness(reqVO, getLoginUserId());
168 142 return success(true);
169 143 }
170   - @GetMapping("/page-by-contact")
171   - @Operation(summary = "获得联系人的商机分页")
172   - @PreAuthorize("@ss.hasPermission('crm:business:query')")
173   - public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessContactPage(@Valid CrmContactBusinessLinkPageReqVO pageVO) {
174   - PageResult<CrmBusinessRespVO> pageResult = businessService.getBusinessPageByContact(pageVO);
175   - // 处理商机状态类型名称回显
176   - Set<Long> statusTypeIds = pageResult.getList().stream()
177   - .map(CrmBusinessRespVO::getStatusTypeId).filter(Objects::nonNull).collect(Collectors.toSet());
178   - CrmBusinessStatusTypeQueryVO queryStatusTypeVO = new CrmBusinessStatusTypeQueryVO();
179   - queryStatusTypeVO.setIdList(statusTypeIds);
180   - List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.selectList(queryStatusTypeVO);
181   - Map<Long,String> statusTypeMap = CollectionUtils.convertMap(statusTypeList,CrmBusinessStatusTypeDO::getId,CrmBusinessStatusTypeDO::getName);
182   - // 处理商机状态名称回显
183   - Set<Long> statusIds = pageResult.getList().stream()
184   - .map(CrmBusinessRespVO::getStatusId).filter(Objects::nonNull).collect(Collectors.toSet());
185   - CrmBusinessStatusQueryVO queryVO = new CrmBusinessStatusQueryVO();
186   - queryVO.setIdList(statusIds);
187   - List<CrmBusinessStatusDO> statusList = businessStatusService.selectList(queryVO);
188   - Map<Long,String> statusMap = CollectionUtils.convertMap(statusList,CrmBusinessStatusDO::getId,CrmBusinessStatusDO::getName);
189   - // 处理客户名称回显
190   - Set<Long> customerIds = CollectionUtils.convertSet(pageResult.getList(),CrmBusinessRespVO::getCustomerId);
191   - List<CrmCustomerDO> customerList = customerService.getCustomerList(customerIds);
192   - Map<Long,String> customerMap = CollectionUtils.convertMap(customerList,CrmCustomerDO::getId,CrmCustomerDO::getName);
193   - pageResult.getList().forEach(item -> {
194   - item.setStatusTypeName(statusTypeMap.get(item.getStatusTypeId()));
195   - item.setStatusName(statusMap.get(item.getStatusId()));
196   - item.setCustomerName(customerMap.get(item.getCustomerId()));
197   - });
198   - return success(pageResult);
199   - }
  144 +
200 145 }
... ...
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 {
20 20 @Schema(description = "客户编号", example = "10795")
21 21 private Long customerId;
22 22  
  23 + @Schema(description = "联系人编号", example = "10795")
  24 + private Long contactId;
  25 +
23 26 @Schema(description = "场景类型", example = "1")
24 27 @InEnum(CrmSceneTypeEnum.class)
25 28 private Integer sceneType; // 场景类型,为 null 时则表示全部
... ...
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 {
25 25 @Schema(description = "状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "跟进中")
26 26 private String statusName;
27 27  
28   - @Schema(description = "联系人商机关联ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32129")
29   - private Long businessContactId;
30 28 }
... ...
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;
13 13 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
14 14 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
15 15 import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants;
16   -import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessLinkService;
  16 +import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessService;
17 17 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
18 18 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
19 19 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
... ... @@ -30,10 +30,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
30 30 import org.springframework.validation.annotation.Validated;
31 31 import org.springframework.web.bind.annotation.*;
32 32  
33   -import javax.annotation.Resource;
34   -import javax.servlet.http.HttpServletResponse;
35   -import javax.validation.Valid;
36   -import javax.validation.constraints.NotEmpty;
37 33 import java.io.IOException;
38 34 import java.util.Collections;
39 35 import java.util.List;
... ... @@ -63,7 +59,7 @@ public class CrmContactController {
63 59 private AdminUserApi adminUserApi;
64 60  
65 61 @Resource
66   - private CrmContactBusinessLinkService contactBusinessLinkService;
  62 + private CrmContactBusinessService contactBusinessLinkService;
67 63  
68 64 @PostMapping("/create")
69 65 @Operation(summary = "创建联系人")
... ... @@ -103,7 +99,7 @@ public class CrmContactController {
103 99 NumberUtil.parseLong(contact.getCreator()), contact.getOwnerUserId())));
104 100 // 2. 获取客户信息
105 101 List<CrmCustomerDO> customerList = customerService.getCustomerList(
106   - Collections.singletonList(contact.getCustomerId()), getLoginUserId());
  102 + Collections.singletonList(contact.getCustomerId()));
107 103 // 3. 直属上级
108 104 List<CrmContactDO> parentContactList = contactService.getContactList(
109 105 Collections.singletonList(contact.getParentId()), getLoginUserId());
... ... @@ -148,23 +144,6 @@ public class CrmContactController {
148 144 convertDetailContactPage(pageResult).getList());
149 145 }
150 146  
151   - @DeleteMapping("/delete-batch-business")
152   - @Operation(summary = "批量删除联系人商机关联")
153   - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:delete')")
154   - public CommonResult<Boolean> deleteContactBusinessLinkBatch(@Valid @RequestBody List<Long> businessContactIds) {
155   - contactBusinessLinkService.deleteContactBusinessLink(businessContactIds);
156   - return success(true);
157   - }
158   -
159   - @PostMapping("/create-batch-business")
160   - @Operation(summary = "创建联系人商机关联")
161   - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:create')")
162   - public CommonResult<Boolean> createContactBusinessLinkBatch(
163   - @Valid @NotEmpty @RequestBody List<CrmContactBusinessLinkSaveReqVO> createReqVO) {
164   - contactBusinessLinkService.createContactBusinessLinkBatch(createReqVO);
165   - return success(true);
166   - }
167   -
168 147 /**
169 148 * 转换成详细的联系人分页,即读取关联信息
170 149 *
... ... @@ -178,7 +157,7 @@ public class CrmContactController {
178 157 }
179 158 // 1. 获取客户列表
180 159 List<CrmCustomerDO> crmCustomerDOList = customerService.getCustomerList(
181   - convertSet(contactList, CrmContactDO::getCustomerId), getLoginUserId());
  160 + convertSet(contactList, CrmContactDO::getCustomerId));
182 161 // 2. 获取创建人、负责人列表
183 162 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(contactList,
184 163 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId())));
... ... @@ -196,4 +175,22 @@ public class CrmContactController {
196 175 return success(true);
197 176 }
198 177  
  178 + // ================== 关联/取关商机 ===================
  179 +
  180 + @PostMapping("/create-business-list")
  181 + @Operation(summary = "创建联系人与商机的关联")
  182 + @PreAuthorize("@ss.hasPermission('crm:contact:create-business')")
  183 + public CommonResult<Boolean> createContactBusinessList(@Valid @RequestBody CrmContactBusinessReqVO createReqVO) {
  184 + contactBusinessLinkService.createContactBusinessList(createReqVO);
  185 + return success(true);
  186 + }
  187 +
  188 + @DeleteMapping("/delete-business-list")
  189 + @Operation(summary = "删除联系人与商机的关联")
  190 + @PreAuthorize("@ss.hasPermission('crm:contact:delete-business')")
  191 + public CommonResult<Boolean> deleteContactBusinessList(@Valid @RequestBody CrmContactBusinessReqVO deleteReqVO) {
  192 + contactBusinessLinkService.deleteContactBusinessList(deleteReqVO);
  193 + return success(true);
  194 + }
  195 +
199 196 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkPageReqVO.java deleted
1   -package cn.iocoder.yudao.module.crm.controller.admin.contact.vo;
2   -
3   -import cn.iocoder.yudao.framework.common.pojo.PageParam;
4   -import io.swagger.v3.oas.annotations.media.Schema;
5   -import lombok.Data;
6   -import lombok.EqualsAndHashCode;
7   -import lombok.ToString;
8   -import org.springframework.format.annotation.DateTimeFormat;
9   -
10   -import java.time.LocalDateTime;
11   -
12   -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
13   -
14   -@Schema(description = "管理后台 - CRM 联系人商机关联分页 Request VO")
15   -@Data
16   -@EqualsAndHashCode(callSuper = true)
17   -@ToString(callSuper = true)
18   -public class CrmContactBusinessLinkPageReqVO extends PageParam {
19   -
20   - @Schema(description = "联系人编号", example = "20878")
21   - private Long contactId;
22   -
23   - @Schema(description = "商机编号", example = "7638")
24   - private Long businessId;
25   -
26   - @Schema(description = "创建时间")
27   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
28   - private LocalDateTime[] createTime;
29   -
30   -}
31 0 \ No newline at end of file
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkRespVO.java deleted
1   -package cn.iocoder.yudao.module.crm.controller.admin.contact.vo;
2   -
3   -import com.alibaba.excel.annotation.ExcelProperty;
4   -import io.swagger.v3.oas.annotations.media.Schema;
5   -import lombok.Data;
6   -
7   -import java.time.LocalDateTime;
8   -
9   -@Schema(description = "管理后台 - CRM 联系人商机关联 Response VO")
10   -@Data
11   -public class CrmContactBusinessLinkRespVO {
12   -
13   - @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "17220")
14   - @ExcelProperty("主键")
15   - private Long id;
16   -
17   - @Schema(description = "联系人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20878")
18   - private Long contactId;
19   -
20   - @Schema(description = "商机编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7638")
21   - private Long businessId;
22   -
23   - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
24   - private LocalDateTime createTime;
25   -
26   -}
27 0 \ No newline at end of file
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkSaveReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessReqVO.java
1 1 package cn.iocoder.yudao.module.crm.controller.admin.contact.vo;
2 2  
3 3 import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import jakarta.validation.constraints.NotNull;
4 6 import lombok.Data;
5 7  
6   -import jakarta.validation.constraints.NotNull;
  8 +import java.util.List;
7 9  
8   -@Schema(description = "管理后台 - CRM 联系人商机关联新增/修改 Request VO")
  10 +@Schema(description = "管理后台 - CRM 联系人商机 Request VO") // 用于关联,取消关联的操作
9 11 @Data
10   -public class CrmContactBusinessLinkSaveReqVO {
11   -
12   - @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "17220")
13   - private Long id;
  12 +public class CrmContactBusinessReqVO {
14 13  
15 14 @Schema(description = "联系人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20878")
16 15 @NotNull(message="联系人不能为空")
17 16 private Long contactId;
18 17  
19   - @Schema(description = "商机编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7638")
20   - @NotNull(message="商机不能为空")
21   - private Long businessId;
  18 + @Schema(description = "商机编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "7638")
  19 + @NotEmpty(message="商机不能为空")
  20 + private List<Long> businessIds;
22 21  
23 22 }
24 23 \ No newline at end of file
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contactbusinesslink/CrmContactBusinessLinkController.java deleted
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 {
124 124 }
125 125 // 1. 获取客户列表
126 126 List<CrmCustomerDO> customerList = customerService.getCustomerList(
127   - convertSet(contactList, CrmContractDO::getCustomerId), getLoginUserId());
  127 + convertSet(contactList, CrmContractDO::getCustomerId));
128 128 // 2. 获取创建人、负责人列表
129 129 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(contactList,
130 130 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId())));
... ...
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 {
131 131 }
132 132 // 1. 获取客户列表
133 133 List<CrmCustomerDO> customerList = customerService.getCustomerList(
134   - convertSet(receivableList, CrmReceivableDO::getCustomerId), getLoginUserId());
  134 + convertSet(receivableList, CrmReceivableDO::getCustomerId));
135 135 // 2. 获取创建人、负责人列表
136 136 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(receivableList,
137 137 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId())));
... ...
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 {
135 135 }
136 136 // 1. 获取客户列表
137 137 List<CrmCustomerDO> customerList = customerService.getCustomerList(
138   - convertSet(receivablePlanList, CrmReceivablePlanDO::getCustomerId), getLoginUserId());
  138 + convertSet(receivablePlanList, CrmReceivablePlanDO::getCustomerId));
139 139 // 2. 获取创建人、负责人列表
140 140 Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(receivablePlanList,
141 141 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId())));
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/CrmContactConvert.java
1 1 package cn.iocoder.yudao.module.crm.convert.contact;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
4 5 import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
5 6 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*;
6 7 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
... ... @@ -13,7 +14,6 @@ import org.mapstruct.factory.Mappers;
13 14  
14 15 import java.util.List;
15 16 import java.util.Map;
16   -import java.util.stream.Collectors;
17 17  
18 18 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
19 19 import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
... ... @@ -55,16 +55,16 @@ public interface CrmContactConvert {
55 55 *
56 56 * @param contactDO 联系人
57 57 * @param userMap 用户列表
58   - * @param crmCustomerDOList 客户
  58 + * @param customerDOList 客户
59 59 * @return ContactRespVO
60 60 */
61   - default CrmContactRespVO convert(CrmContactDO contactDO, Map<Long, AdminUserRespDTO> userMap, List<CrmCustomerDO> crmCustomerDOList,
62   - List<CrmContactDO> contactList) {
  61 + default CrmContactRespVO convert(CrmContactDO contactDO, Map<Long, AdminUserRespDTO> userMap,
  62 + List<CrmCustomerDO> customerDOList, List<CrmContactDO> contactList) {
63 63 CrmContactRespVO contactVO = convert(contactDO);
64 64 setUserInfo(contactVO, userMap);
65   - Map<Long, CrmCustomerDO> ustomerMap = crmCustomerDOList.stream().collect(Collectors.toMap(CrmCustomerDO::getId, v -> v));
66   - Map<Long, CrmContactDO> contactMap = contactList.stream().collect(Collectors.toMap(CrmContactDO::getId, v -> v));
67   - findAndThen(ustomerMap, contactDO.getCustomerId(), customer -> contactVO.setCustomerName(customer.getName()));
  65 + Map<Long, CrmCustomerDO> customerMap = CollectionUtils.convertMap(customerDOList, CrmCustomerDO::getId);
  66 + Map<Long, CrmContactDO> contactMap = CollectionUtils.convertMap(contactList, CrmContactDO::getId);
  67 + findAndThen(customerMap, contactDO.getCustomerId(), customer -> contactVO.setCustomerName(customer.getName()));
68 68 findAndThen(contactMap, contactDO.getParentId(), contact -> contactVO.setParentName(contact.getName()));
69 69 return contactVO;
70 70 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/CrmContactBusinessLinkDO.java renamed to 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;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 4 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
5   -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
6 5 import com.baomidou.mybatisplus.annotation.KeySequence;
7 6 import com.baomidou.mybatisplus.annotation.TableId;
8 7 import com.baomidou.mybatisplus.annotation.TableName;
9 8 import lombok.*;
10 9  
11 10 /**
12   - * CRM 联系人商机关联 DO
  11 + * CRM 联系人与商机的关联 DO
13 12 *
14 13 * @author 芋道源码
15 14 */
... ... @@ -21,7 +20,7 @@ import lombok.*;
21 20 @Builder
22 21 @NoArgsConstructor
23 22 @AllArgsConstructor
24   -public class CrmContactBusinessLinkDO extends BaseDO {
  23 +public class CrmContactBusinessDO extends BaseDO {
25 24  
26 25 /**
27 26 * 主键
... ...
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&lt;CrmBusinessDO&gt; {
30 30  
31 31 default PageResult<CrmBusinessDO> selectPageByCustomerId(CrmBusinessPageReqVO pageReqVO) {
32 32 return selectPage(pageReqVO, new LambdaQueryWrapperX<CrmBusinessDO>()
33   - .eq(CrmBusinessDO::getCustomerId, pageReqVO.getCustomerId()) // 指定客户编号
  33 + .eq(CrmBusinessDO::getCustomerId, pageReqVO.getCustomerId()) // 指定客户编号
  34 + .likeIfPresent(CrmBusinessDO::getName, pageReqVO.getName())
  35 + .orderByDesc(CrmBusinessDO::getId));
  36 + }
  37 +
  38 + default PageResult<CrmBusinessDO> selectPageByContactId(CrmBusinessPageReqVO pageReqVO, Collection<Long> businessIds) {
  39 + return selectPage(pageReqVO, new LambdaQueryWrapperX<CrmBusinessDO>()
  40 + .in(CrmBusinessDO::getId, businessIds) // 指定商机编号
34 41 .likeIfPresent(CrmBusinessDO::getName, pageReqVO.getName())
35 42 .orderByDesc(CrmBusinessDO::getId));
36 43 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contactbusinesslink/CrmContactBusinessLinkMapper.java deleted
1   -package cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink;
2   -
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5   -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
7   -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
8   -import org.apache.ibatis.annotations.Mapper;
9   -
10   -/**
11   - * CRM 联系人商机关联 Mapper
12   - *
13   - * @author 芋道源码
14   - */
15   -@Mapper
16   -public interface CrmContactBusinessLinkMapper extends BaseMapperX<CrmContactBusinessLinkDO> {
17   -
18   - default PageResult<CrmContactBusinessLinkDO> selectPage(CrmContactBusinessLinkPageReqVO reqVO) {
19   - return selectPage(reqVO, new LambdaQueryWrapperX<CrmContactBusinessLinkDO>()
20   - .eqIfPresent(CrmContactBusinessLinkDO::getContactId, reqVO.getContactId())
21   - .eqIfPresent(CrmContactBusinessLinkDO::getBusinessId, reqVO.getBusinessId())
22   - .betweenIfPresent(CrmContactBusinessLinkDO::getCreateTime, reqVO.getCreateTime())
23   - .orderByDesc(CrmContactBusinessLinkDO::getId));
24   - }
25   - default PageResult<CrmContactBusinessLinkDO> selectPageByContact(CrmContactBusinessLinkPageReqVO reqVO) {
26   - return selectPage(reqVO, new LambdaQueryWrapperX<CrmContactBusinessLinkDO>()
27   - .eqIfPresent(CrmContactBusinessLinkDO::getContactId, reqVO.getContactId())
28   - .orderByDesc(CrmContactBusinessLinkDO::getId));
29   - }
30   -}
31 0 \ No newline at end of file
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contactbusinesslink/CrmContactBusinessMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  4 +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
  5 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6 +import org.apache.ibatis.annotations.Mapper;
  7 +
  8 +import java.util.Collection;
  9 +import java.util.List;
  10 +
  11 +/**
  12 + * CRM 联系人与商机的关联 Mapper
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@Mapper
  17 +public interface CrmContactBusinessMapper extends BaseMapperX<CrmContactBusinessDO> {
  18 +
  19 + default CrmContactBusinessDO selectByContactIdAndBusinessId(Long contactId, Long businessId) {
  20 + return selectOne(CrmContactBusinessDO::getContactId, contactId,
  21 + CrmContactBusinessDO::getBusinessId, businessId);
  22 + }
  23 +
  24 + default void deleteByContactIdAndBusinessId(Long contactId, Collection<Long> businessIds) {
  25 + delete(new LambdaQueryWrapper<CrmContactBusinessDO>()
  26 + .eq(CrmContactBusinessDO::getContactId, contactId)
  27 + .in(CrmContactBusinessDO::getBusinessId, businessIds));
  28 + }
  29 +
  30 + default List<CrmContactBusinessDO> selectListByContactId(Long contactId) {
  31 + return selectList(CrmContactBusinessDO::getContactId, contactId);
  32 + }
  33 +
  34 +}
0 35 \ No newline at end of file
... ...
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
5 5 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO;
6 6 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO;
7 7 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessUpdateReqVO;
8   -import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*;
9   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
10   -import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO;
11 8 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
  9 +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
12 10 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
13 11 import jakarta.validation.Valid;
14 12  
... ... @@ -78,11 +76,21 @@ public interface CrmBusinessService {
78 76 * 数据权限:基于 {@link CrmCustomerDO} 读取
79 77 *
80 78 * @param pageReqVO 分页查询
81   - * @return 联系人分页
  79 + * @return 商机分页
82 80 */
83 81 PageResult<CrmBusinessDO> getBusinessPageByCustomerId(CrmBusinessPageReqVO pageReqVO);
84 82  
85 83 /**
  84 + * 获得商机分页,基于指定联系人
  85 + *
  86 + * 数据权限:基于 {@link CrmContactDO} 读取
  87 + *
  88 + * @param pageReqVO 分页参数
  89 + * @return 商机分页
  90 + */
  91 + PageResult<CrmBusinessDO> getBusinessPageByContact(CrmBusinessPageReqVO pageReqVO);
  92 +
  93 + /**
86 94 * 商机转移
87 95 *
88 96 * @param reqVO 请求
... ... @@ -90,10 +98,4 @@ public interface CrmBusinessService {
90 98 */
91 99 void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId);
92 100  
93   - /**
94   - * 获取联系人商机列表
95   - * @param pageReqVO 分页参数
96   - * @return 联系人商机
97   - */
98   - PageResult<CrmBusinessRespVO> getBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO);
99 101 }
... ...
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
7 7 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO;
8 8 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO;
9 9 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessUpdateReqVO;
10   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
11   -import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
12   -import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*;
13   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
14   -import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO;
15 10 import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert;
16 11 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
17   -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
18   -import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
  12 +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
19 13 import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper;
20 14 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
21 15 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
22 16 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
23   -import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
  17 +import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessService;
24 18 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
25 19 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
26 20 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
... ... @@ -31,10 +25,9 @@ import org.springframework.validation.annotation.Validated;
31 25  
32 26 import java.util.Collection;
33 27 import java.util.List;
34   -import java.util.Map;
35   -import java.util.Set;
36 28  
37 29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  30 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
38 31 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS;
39 32  
40 33 /**
... ... @@ -48,14 +41,13 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
48 41  
49 42 @Resource
50 43 private CrmBusinessMapper businessMapper;
51   - @Resource
52   - private CrmCustomerService customerService;
53 44  
54 45 @Resource
55   - private CrmPermissionService crmPermissionService;
56   -
  46 + private CrmPermissionService permissionService;
57 47 @Resource
58   - private CrmContactService crmContactService;
  48 + private CrmContactService contactService;
  49 + @Resource
  50 + private CrmContactBusinessService contactBusinessService;
59 51  
60 52 @Override
61 53 @Transactional(rollbackFor = Exception.class)
... ... @@ -65,7 +57,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
65 57 businessMapper.insert(business);
66 58  
67 59 // 创建数据权限
68   - crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType())
  60 + permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType())
69 61 .setBizId(business.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
70 62  
71 63 // 返回
... ... @@ -93,7 +85,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
93 85 // 删除
94 86 businessMapper.deleteById(id);
95 87 // 删除数据权限
96   - crmPermissionService.deletePermission(CrmBizTypeEnum.CRM_BUSINESS.getType(), id);
  88 + permissionService.deletePermission(CrmBizTypeEnum.CRM_BUSINESS.getType(), id);
97 89 }
98 90  
99 91 private CrmBusinessDO validateBusinessExists(Long id) {
... ... @@ -130,42 +122,32 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
130 122 }
131 123  
132 124 @Override
  125 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACT, bizId = "#pageReqVO.contactId", level = CrmPermissionLevelEnum.READ)
  126 + public PageResult<CrmBusinessDO> getBusinessPageByContact(CrmBusinessPageReqVO pageReqVO) {
  127 + // 1. 查询关联的商机编号
  128 + List<CrmContactBusinessDO> contactBusinessList = contactBusinessService.getContactBusinessListByContactId(
  129 + pageReqVO.getContactId());
  130 + if (CollUtil.isEmpty(contactBusinessList)) {
  131 + return PageResult.empty();
  132 + }
  133 + // 2. 查询商机分页
  134 + return businessMapper.selectPageByContactId(pageReqVO,
  135 + convertSet(contactBusinessList, CrmContactBusinessDO::getBusinessId));
  136 + }
  137 +
  138 + @Override
133 139 @Transactional(rollbackFor = Exception.class)
134 140 public void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId) {
135 141 // 1 校验商机是否存在
136 142 validateBusinessExists(reqVO.getId());
137 143  
138 144 // 2.1 数据权限转移
139   - crmPermissionService.transferPermission(
  145 + permissionService.transferPermission(
140 146 CrmBusinessConvert.INSTANCE.convert(reqVO, userId).setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType()));
141 147 // 2.2 设置新的负责人
142 148 businessMapper.updateOwnerUserIdById(reqVO.getId(), reqVO.getNewOwnerUserId());
143 149  
144 150 // 3. TODO 记录转移日志
145 151 }
146   - @Override
147   - public PageResult<CrmBusinessRespVO> getBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO) {
148   - CrmContactBusinessLinkPageReqVO crmContactBusinessLinkPageReqVO = new CrmContactBusinessLinkPageReqVO();
149   - crmContactBusinessLinkPageReqVO.setContactId(pageReqVO.getContactId());
150   - PageResult<CrmContactBusinessLinkDO> businessLinkDOS = crmContactService.selectBusinessPageByContact(crmContactBusinessLinkPageReqVO);
151   - if (CollUtil.isEmpty(businessLinkDOS.getList())){
152   - return PageResult.empty();
153   - }
154   - List<CrmBusinessDO> businessList = this.getBusinessList(CollectionUtils.convertList(businessLinkDOS.getList(),
155   - CrmContactBusinessLinkDO::getBusinessId));
156   - if (CollUtil.isEmpty(businessList)){
157   - return PageResult.empty();
158   - }
159   - PageResult<CrmBusinessRespVO> pageResult = new PageResult<CrmBusinessRespVO>();
160   - List<CrmBusinessRespVO> respVOList = BeanUtils.toBean(businessList,CrmBusinessRespVO.class);
161   - Map<Long,Long> businessContactMap = CollectionUtils.convertMap(businessLinkDOS.getList(),
162   - CrmContactBusinessLinkDO::getBusinessId,CrmContactBusinessLinkDO::getId);
163   - respVOList.forEach(item -> {
164   - item.setBusinessContactId(businessContactMap.get(item.getId()));
165   - });
166   - pageResult.setList(respVOList);
167   - pageResult.setTotal(businessLinkDOS.getTotal());
168   - return pageResult;
169 152  
170   - }
171 153 }
... ...
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
7 7 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO;
8 8  
9 9 import jakarta.validation.Valid;
  10 +
  11 +import java.util.Collection;
10 12 import java.util.List;
11 13  
12 14 /**
... ... @@ -64,4 +66,12 @@ public interface CrmBusinessStatusService {
64 66 */
65 67 List<CrmBusinessStatusDO> selectList(CrmBusinessStatusQueryVO queryVO);
66 68  
  69 + /**
  70 + * 获得商机状态列表
  71 + *
  72 + * @param ids 编号数组
  73 + * @return 商机状态列表
  74 + */
  75 + List<CrmBusinessStatusDO> getBusinessStatusList(Collection<Long> ids);
  76 +
67 77 }
... ...
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;
12 12  
13 13 import jakarta.annotation.Resource;
14 14  
  15 +import java.util.Collection;
15 16 import java.util.List;
16 17  
17 18 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
... ... @@ -77,4 +78,9 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
77 78 return businessStatusMapper.selectList(queryVO);
78 79 }
79 80  
  81 + @Override
  82 + public List<CrmBusinessStatusDO> getBusinessStatusList(Collection<Long> ids) {
  83 + return businessStatusMapper.selectBatchIds(ids);
  84 + }
  85 +
80 86 }
... ...
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
5 5 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO;
6 6 import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO;
7 7 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO;
8   -
9 8 import jakarta.validation.Valid;
  9 +
  10 +import java.util.Collection;
10 11 import java.util.List;
11 12  
12 13 /**
... ... @@ -63,4 +64,12 @@ public interface CrmBusinessStatusTypeService {
63 64 */
64 65 List<CrmBusinessStatusTypeDO> selectList(CrmBusinessStatusTypeQueryVO queryVO);
65 66  
  67 + /**
  68 + * 获得商机状态类型列表
  69 + *
  70 + * @param ids 编号数组
  71 + * @return 商机状态类型列表
  72 + */
  73 + List<CrmBusinessStatusTypeDO> getBusinessStatusTypeList(Collection<Long> ids);
  74 +
66 75 }
... ...
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;
17 17 import org.springframework.validation.annotation.Validated;
18 18  
19 19 import jakarta.annotation.Resource;
  20 +
  21 +import java.util.Collection;
20 22 import java.util.List;
21 23  
22 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
... ... @@ -118,4 +120,9 @@ public class CrmBusinessStatusTypeServiceImpl implements CrmBusinessStatusTypeSe
118 120 return businessStatusTypeMapper.selectList(queryVO);
119 121 }
120 122  
  123 + @Override
  124 + public List<CrmBusinessStatusTypeDO> getBusinessStatusTypeList(Collection<Long> ids) {
  125 + return businessStatusTypeMapper.selectBatchIds(ids);
  126 + }
  127 +
121 128 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkService.java deleted
1   -package cn.iocoder.yudao.module.crm.service.contact;
2   -
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO;
5   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
6   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkSaveReqVO;
7   -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
8   -
9   -import jakarta.validation.Valid;
10   -import java.util.List;
11   -
12   -/**
13   - * CRM 联系人商机关联 Service 接口
14   - *
15   - * @author 芋道源码
16   - */
17   -public interface CrmContactBusinessLinkService {
18   -
19   - /**
20   - * 创建联系人商机关联
21   - *
22   - * @param createReqVO 创建信息
23   - * @return 编号
24   - */
25   - Long createContactBusinessLink(@Valid CrmContactBusinessLinkSaveReqVO createReqVO);
26   -
27   - /**
28   - * 创建联系人商机关联
29   - *
30   - * @param createReqVO 创建信息
31   - */
32   - void createContactBusinessLinkBatch(@Valid List<CrmContactBusinessLinkSaveReqVO> createReqVO);
33   -
34   - /**
35   - * 更新联系人商机关联
36   - *
37   - * @param updateReqVO 更新信息
38   - */
39   - void updateContactBusinessLink(@Valid CrmContactBusinessLinkSaveReqVO updateReqVO);
40   -
41   - /**
42   - * 删除联系人商机关联
43   - *
44   - * @param businessContactIds 删除列表
45   - */
46   - void deleteContactBusinessLink(@Valid List<Long> businessContactIds);
47   -
48   - /**
49   - * 获得联系人商机关联
50   - *
51   - * @param id 编号
52   - * @return 联系人商机关联
53   - */
54   - CrmContactBusinessLinkDO getContactBusinessLink(Long id);
55   -
56   - /**
57   - * 获得联系人商机关联分页
58   - *
59   - * @param pageReqVO 编号
60   - * @return 联系人商机关联
61   - */
62   - PageResult<CrmBusinessRespVO> getContactBusinessLinkPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO);
63   -
64   - /**
65   - * 获得联系人商机关联分页
66   - *
67   - * @param pageReqVO 分页查询
68   - * @return 联系人商机关联分页
69   - */
70   - PageResult<CrmContactBusinessLinkDO> getContactBusinessLinkPage(CrmContactBusinessLinkPageReqVO pageReqVO);
71   -
72   -}
73 0 \ No newline at end of file
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkServiceImpl.java deleted
1   -package cn.iocoder.yudao.module.crm.service.contact;
2   -
3   -import cn.hutool.core.collection.CollUtil;
4   -import cn.hutool.core.lang.Assert;
5   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
6   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
7   -import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
8   -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
9   -import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO;
10   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
11   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkSaveReqVO;
12   -import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert;
13   -import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
14   -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
15   -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
16   -import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessLinkMapper;
17   -import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
18   -import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
19   -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission;
20   -import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants;
21   -import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
22   -import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
23   -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
24   -import org.springframework.stereotype.Service;
25   -import org.springframework.validation.annotation.Validated;
26   -
27   -import javax.annotation.Resource;
28   -import java.util.ArrayList;
29   -import java.util.List;
30   -
31   -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
32   -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
33   -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS;
34   -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTACT_BUSINESS_LINK_NOT_EXISTS;
35   -
36   -// TODO @puhui999:数据权限的校验;每个操作;
37   -/**
38   - * 联系人商机关联 Service 实现类
39   - *
40   - * @author 芋道源码
41   - */
42   -@Service
43   -@Validated
44   -public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLinkService {
45   -
46   - @Resource
47   - private CrmContactBusinessLinkMapper contactBusinessLinkMapper;
48   - @Resource
49   - private CrmBusinessService crmBusinessService;
50   -
51   - @Resource
52   - private CrmContactService crmContactService;
53   -
54   - @Override
55   - public Long createContactBusinessLink(CrmContactBusinessLinkSaveReqVO createReqVO) {
56   - CrmContactBusinessLinkDO contactBusinessLink = BeanUtils.toBean(createReqVO, CrmContactBusinessLinkDO.class);
57   - contactBusinessLinkMapper.insert(contactBusinessLink);
58   - return contactBusinessLink.getId();
59   - }
60   -
61   - @Override
62   - public void createContactBusinessLinkBatch(List<CrmContactBusinessLinkSaveReqVO> createReqVOList) {
63   - // 插入
64   - CrmContactDO contactDO = crmContactService.getContact(createReqVOList.stream().findFirst().get().getContactId());
65   - Assert.notNull(contactDO,ErrorCodeConstants.CONTACT_NOT_EXISTS.getMsg());
66   - List<CrmContactBusinessLinkDO> saveDoList = new ArrayList<CrmContactBusinessLinkDO>();
67   - createReqVOList.forEach(item -> {
68   - CrmBusinessDO crmBusinessDO = crmBusinessService.getBusiness(item.getBusinessId());
69   - if(crmBusinessDO == null){
70   - throw exception(BUSINESS_NOT_EXISTS);
71   - }
72   - // 判重
73   - CrmContactBusinessLinkDO crmContactBusinessLinkDO = contactBusinessLinkMapper.selectOne(new LambdaQueryWrapper<CrmContactBusinessLinkDO>()
74   - .eq(CrmContactBusinessLinkDO::getBusinessId,item.getBusinessId())
75   - .eq(CrmContactBusinessLinkDO::getContactId,item.getContactId()));
76   - if(crmContactBusinessLinkDO == null){
77   - saveDoList.add(BeanUtils.toBean(item,CrmContactBusinessLinkDO.class));
78   - }
79   - });
80   - contactBusinessLinkMapper.insertBatch(saveDoList);
81   - }
82   -
83   - @Override
84   - public void updateContactBusinessLink(CrmContactBusinessLinkSaveReqVO updateReqVO) {
85   - // 校验存在
86   - validateContactBusinessLinkExists(updateReqVO.getId());
87   - // 更新
88   - CrmContactBusinessLinkDO updateObj = BeanUtils.toBean(updateReqVO, CrmContactBusinessLinkDO.class);
89   - contactBusinessLinkMapper.updateById(updateObj);
90   - }
91   -
92   - @Override
93   - public void deleteContactBusinessLink(List<Long> businessContactIds) {
94   - // 删除
95   - contactBusinessLinkMapper.deleteBatchIds(businessContactIds);
96   - }
97   -
98   - private void validateContactBusinessLinkExists(Long id) {
99   - if (contactBusinessLinkMapper.selectById(id) == null) {
100   - throw exception(CONTACT_BUSINESS_LINK_NOT_EXISTS);
101   - }
102   - }
103   -
104   - @Override
105   - @CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#id", level = CrmPermissionLevelEnum.READ)
106   - public CrmContactBusinessLinkDO getContactBusinessLink(Long id) {
107   - return contactBusinessLinkMapper.selectById(id);
108   - }
109   -
110   - @Override
111   - public PageResult<CrmBusinessRespVO> getContactBusinessLinkPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO) {
112   - CrmContactBusinessLinkPageReqVO crmContactBusinessLinkPageReqVO = new CrmContactBusinessLinkPageReqVO();
113   - crmContactBusinessLinkPageReqVO.setContactId(pageReqVO.getContactId());
114   - PageResult<CrmContactBusinessLinkDO> businessLinkDOS = contactBusinessLinkMapper.selectPageByContact(crmContactBusinessLinkPageReqVO);
115   - List<CrmBusinessDO> businessDOS = crmBusinessService.getBusinessList(CollectionUtils.convertList(businessLinkDOS.getList(),
116   - CrmContactBusinessLinkDO::getBusinessId), getLoginUserId());
117   - PageResult<CrmBusinessRespVO> pageResult = new PageResult<CrmBusinessRespVO>();
118   - pageResult.setList(CrmBusinessConvert.INSTANCE.convert(businessDOS));
119   - pageResult.setTotal(businessLinkDOS.getTotal());
120   - return pageResult;
121   -
122   - }
123   -
124   - @Override
125   - public PageResult<CrmContactBusinessLinkDO> getContactBusinessLinkPage(CrmContactBusinessLinkPageReqVO pageReqVO) {
126   - return contactBusinessLinkMapper.selectPage(pageReqVO);
127   - }
128   -
129   -}
130 0 \ No newline at end of file
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.service.contact;
  2 +
  3 +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessReqVO;
  4 +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
  5 +import jakarta.validation.Valid;
  6 +
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * CRM 联系人与商机的关联 Service 接口
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +public interface CrmContactBusinessService {
  15 +
  16 + /**
  17 + * 创建联系人与商机的关联
  18 + *
  19 + * @param createReqVO 创建信息
  20 + */
  21 + void createContactBusinessList(@Valid CrmContactBusinessReqVO createReqVO);
  22 +
  23 + /**
  24 + * 删除联系人与商机的关联
  25 + *
  26 + * @param deleteReqVO 删除信息
  27 + */
  28 + void deleteContactBusinessList(@Valid CrmContactBusinessReqVO deleteReqVO);
  29 +
  30 + /**
  31 + * 获得联系人与商机的关联列表,基于联系人编号
  32 + *
  33 + * @param contactId 联系人编号
  34 + * @return 联系人商机关联
  35 + */
  36 + List<CrmContactBusinessDO> getContactBusinessListByContactId(Long contactId);
  37 +
  38 +}
0 39 \ No newline at end of file
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.service.contact;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessReqVO;
  5 +import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
  6 +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
  7 +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
  8 +import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessMapper;
  9 +import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
  10 +import jakarta.annotation.Resource;
  11 +import org.springframework.context.annotation.Lazy;
  12 +import org.springframework.stereotype.Service;
  13 +import org.springframework.validation.annotation.Validated;
  14 +
  15 +import java.util.ArrayList;
  16 +import java.util.List;
  17 +
  18 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  19 +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS;
  20 +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTACT_NOT_EXISTS;
  21 +
  22 +// TODO @puhui999:数据权限的校验;每个操作;
  23 +/**
  24 + * 联系人与商机的关联 Service 实现类
  25 + *
  26 + * @author 芋道源码
  27 + */
  28 +@Service
  29 +@Validated
  30 +public class CrmContactBusinessServiceImpl implements CrmContactBusinessService {
  31 +
  32 + @Resource
  33 + private CrmContactBusinessMapper contactBusinessMapper;
  34 +
  35 + @Resource
  36 + @Lazy // 延迟加载,为了解决延迟加载
  37 + private CrmBusinessService businessService;
  38 + @Resource
  39 + @Lazy // 延迟加载,为了解决延迟加载
  40 + private CrmContactService contactService;
  41 +
  42 + @Override
  43 + public void createContactBusinessList(CrmContactBusinessReqVO createReqVO) {
  44 + CrmContactDO contact = contactService.getContact(createReqVO.getContactId());
  45 + if (contact == null) {
  46 + throw exception(CONTACT_NOT_EXISTS);
  47 + }
  48 + // 遍历处理,考虑到一般数量不会太多,代码处理简单
  49 + List<CrmContactBusinessDO> saveDOList = new ArrayList<>();
  50 + createReqVO.getBusinessIds().forEach(businessId -> {
  51 + CrmBusinessDO business = businessService.getBusiness(businessId);
  52 + if (business == null) {
  53 + throw exception(BUSINESS_NOT_EXISTS);
  54 + }
  55 + // 关联判重
  56 + if (contactBusinessMapper.selectByContactIdAndBusinessId(createReqVO.getContactId(), businessId) != null) {
  57 + return;
  58 + }
  59 + saveDOList.add(new CrmContactBusinessDO(null, createReqVO.getContactId(), businessId));
  60 + });
  61 + // 批量插入
  62 + if (CollUtil.isNotEmpty(saveDOList)) {
  63 + contactBusinessMapper.insertBatch(saveDOList);
  64 + }
  65 + }
  66 +
  67 + @Override
  68 + public void deleteContactBusinessList(CrmContactBusinessReqVO deleteReqVO) {
  69 + CrmContactDO contact = contactService.getContact(deleteReqVO.getContactId());
  70 + if (contact == null) {
  71 + throw exception(CONTACT_NOT_EXISTS);
  72 + }
  73 + // 直接删除
  74 + contactBusinessMapper.deleteByContactIdAndBusinessId(
  75 + deleteReqVO.getContactId(), deleteReqVO.getBusinessIds());
  76 + }
  77 +
  78 + @Override
  79 + public List<CrmContactBusinessDO> getContactBusinessListByContactId(Long contactId) {
  80 + return contactBusinessMapper.selectListByContactId(contactId);
  81 + }
  82 +
  83 +}
0 84 \ No newline at end of file
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactService.java
1 1 package cn.iocoder.yudao.module.crm.service.contact;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO;
5 4 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactCreateReqVO;
6 5 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO;
7 6 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactTransferReqVO;
8 7 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactUpdateReqVO;
9   -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
10 8 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
11 9 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
12 10 import jakarta.validation.Valid;
... ... @@ -90,12 +88,4 @@ public interface CrmContactService {
90 88 */
91 89 void transferContact(CrmContactTransferReqVO reqVO, Long userId);
92 90  
93   -
94   - /**
95   - * 获取联系人商机关联分页列表
96   - * @param reqVO 联系人
97   - * @return 商机联系人关联列表
98   - */
99   - PageResult<CrmContactBusinessLinkDO> selectBusinessPageByContact(CrmContactBusinessLinkPageReqVO reqVO);
100   -
101 91 }
... ...
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;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*;
7 7 import cn.iocoder.yudao.module.crm.convert.contact.CrmContactConvert;
8   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
9   -import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO;
10   -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*;
11   -import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert;
12   -import cn.iocoder.yudao.module.crm.convert.contact.ContactConvert;
13   -import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
14   -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO;
15 8 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
16 9 import cn.iocoder.yudao.module.crm.dal.mysql.contact.CrmContactMapper;
17   -import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessLinkMapper;
18   -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission;
  10 +import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessMapper;
19 11 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
20 12 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
21 13 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
... ... @@ -56,7 +48,7 @@ public class CrmContactServiceImpl implements CrmContactService {
56 48 private AdminUserApi adminUserApi;
57 49  
58 50 @Resource
59   - private CrmContactBusinessLinkMapper contactBusinessLinkMapper;
  51 + private CrmContactBusinessMapper contactBusinessLinkMapper;
60 52  
61 53 @Override
62 54 @Transactional(rollbackFor = Exception.class)
... ... @@ -161,11 +153,4 @@ public class CrmContactServiceImpl implements CrmContactService {
161 153 // 3. TODO 记录转移日志
162 154 }
163 155  
164   - @Override
165   - public PageResult<CrmContactBusinessLinkDO> selectBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO) {
166   - CrmContactBusinessLinkPageReqVO crmContactBusinessLinkPageReqVO = new CrmContactBusinessLinkPageReqVO();
167   - crmContactBusinessLinkPageReqVO.setContactId(pageReqVO.getContactId());
168   - return contactBusinessLinkMapper.selectPageByContact(crmContactBusinessLinkPageReqVO);
169   -
170   - }
171   -}
  156 +}
172 157 \ No newline at end of file
... ...
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 {
56 56 * @return 客户列表
57 57 * @author ljlleo
58 58 */
59   - List<CrmCustomerDO> getCustomerList(Collection<Long> ids, Long userId);
  59 + List<CrmCustomerDO> getCustomerList(Collection<Long> ids);
60 60  
61 61 /**
62 62 * 获得客户分页
... ...
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 {
116 116 }
117 117  
118 118 @Override
119   - public List<CrmCustomerDO> getCustomerList(Collection<Long> ids, Long userId) {
  119 + public List<CrmCustomerDO> getCustomerList(Collection<Long> ids) {
120 120 if (CollUtil.isEmpty(ids)) {
121 121 return Collections.emptyList();
122 122 }
123   - return customerMapper.selectBatchIds(ids, userId);
  123 + return customerMapper.selectBatchIds(ids);
124 124 }
125 125  
126 126 @Override
... ...