mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 02:08:43 +08:00 
			
		
		
		
	📖 CRM:code review 商机模块
This commit is contained in:
		| @@ -24,7 +24,7 @@ public interface ErrorCodeConstants { | |||||||
|     // ========== 联系人管理 1-020-003-000 ========== |     // ========== 联系人管理 1-020-003-000 ========== | ||||||
|     ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(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_NOT_EXISTS = new ErrorCode( 1_020_003_001, "联系人商机关联不存在"); | ||||||
|     ErrorCode CONTACT_BUSINESS_LINK_CREATE_EMPTY = new ErrorCode( 1_020_003_002, "联系人商机关联参数为空"); |  | ||||||
|     // ========== 回款 1-020-004-000 ========== |     // ========== 回款 1-020-004-000 ========== | ||||||
|     ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_020_004_000, "回款不存在"); |     ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_020_004_000, "回款不存在"); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,14 +4,9 @@ import cn.hutool.core.collection.CollUtil; | |||||||
| import cn.hutool.core.lang.Assert; | import cn.hutool.core.lang.Assert; | ||||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | 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.excel.core.util.ExcelUtils; | ||||||
| import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | 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.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.convert.business.CrmBusinessConvert; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | 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.io.IOException; | ||||||
| import java.util.List; | 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.CommonResult.success; | ||||||
| import static cn.iocoder.yudao.framework.common.pojo.PageParam.PAGE_SIZE_NONE; | 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.operatelog.core.enums.OperateTypeEnum.EXPORT; | ||||||
| import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||||||
|  |  | ||||||
| @@ -51,13 +43,10 @@ public class CrmBusinessController { | |||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmBusinessService businessService; |     private CrmBusinessService businessService; | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmCustomerService customerService; |     private CrmCustomerService customerService; | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmBusinessStatusTypeService businessStatusTypeService; |     private CrmBusinessStatusTypeService businessStatusTypeService; | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmBusinessStatusService businessStatusService; |     private CrmBusinessStatusService businessStatusService; | ||||||
|  |  | ||||||
| @@ -99,27 +88,7 @@ public class CrmBusinessController { | |||||||
|     @PreAuthorize("@ss.hasPermission('crm:business:query')") |     @PreAuthorize("@ss.hasPermission('crm:business:query')") | ||||||
|     public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPage(@Valid CrmBusinessPageReqVO pageVO) { |     public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPage(@Valid CrmBusinessPageReqVO pageVO) { | ||||||
|         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(pageVO, getLoginUserId()); |         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(pageVO, getLoginUserId()); | ||||||
|         if (CollUtil.isEmpty(pageResult.getList())) { |         return success(buildBusinessDetailPageResult(pageResult)); | ||||||
|             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)); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @GetMapping("/page-by-customer") |     @GetMapping("/page-by-customer") | ||||||
| @@ -127,24 +96,16 @@ public class CrmBusinessController { | |||||||
|     public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPageByCustomer(@Valid CrmBusinessPageReqVO pageReqVO) { |     public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPageByCustomer(@Valid CrmBusinessPageReqVO pageReqVO) { | ||||||
|         Assert.notNull(pageReqVO.getCustomerId(), "客户编号不能为空"); |         Assert.notNull(pageReqVO.getCustomerId(), "客户编号不能为空"); | ||||||
|         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPageByCustomerId(pageReqVO); |         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPageByCustomerId(pageReqVO); | ||||||
|         // 处理客户名称回显 |         return success(buildBusinessDetailPageResult(pageResult)); | ||||||
|         // 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()); |     @GetMapping("/page-by-contact") | ||||||
|         // 处理商机状态类型名称回显 |     @Operation(summary = "获得联系人的商机分页") | ||||||
|         Set<Long> statusTypeIds = pageResult.getList().stream() |     @PreAuthorize("@ss.hasPermission('crm:business:query')") | ||||||
|                 .map(CrmBusinessDO::getStatusTypeId).filter(Objects::nonNull).collect(Collectors.toSet()); |     public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessContactPage(@Valid CrmBusinessPageReqVO pageReqVO) { | ||||||
|         CrmBusinessStatusTypeQueryVO queryStatusTypeVO = new CrmBusinessStatusTypeQueryVO(); |         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPageByContact(pageReqVO); | ||||||
|         queryStatusTypeVO.setIdList(statusTypeIds); |         return success(buildBusinessDetailPageResult(pageResult)); | ||||||
|         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)); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @GetMapping("/export-excel") |     @GetMapping("/export-excel") | ||||||
| @@ -156,8 +117,21 @@ public class CrmBusinessController { | |||||||
|         exportReqVO.setPageSize(PAGE_SIZE_NONE); |         exportReqVO.setPageSize(PAGE_SIZE_NONE); | ||||||
|         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(exportReqVO, getLoginUserId()); |         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(exportReqVO, getLoginUserId()); | ||||||
|         // 导出 Excel |         // 导出 Excel | ||||||
|         ExcelUtils.write(response, "商机.xls", "数据", CrmBusinessExcelVO.class, |         ExcelUtils.write(response, "商机.xls", "数据", CrmBusinessRespVO.class, | ||||||
|                 CrmBusinessConvert.INSTANCE.convertList02(pageResult.getList())); |                 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") |     @PutMapping("/transfer") | ||||||
| @@ -167,34 +141,5 @@ public class CrmBusinessController { | |||||||
|         businessService.transferBusiness(reqVO, getLoginUserId()); |         businessService.transferBusiness(reqVO, getLoginUserId()); | ||||||
|         return success(true); |         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); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -20,6 +20,9 @@ public class CrmBusinessPageReqVO extends PageParam { | |||||||
|     @Schema(description = "客户编号", example = "10795") |     @Schema(description = "客户编号", example = "10795") | ||||||
|     private Long customerId; |     private Long customerId; | ||||||
|  |  | ||||||
|  |     @Schema(description = "联系人编号", example = "10795") | ||||||
|  |     private Long contactId; | ||||||
|  |  | ||||||
|     @Schema(description = "场景类型", example = "1") |     @Schema(description = "场景类型", example = "1") | ||||||
|     @InEnum(CrmSceneTypeEnum.class) |     @InEnum(CrmSceneTypeEnum.class) | ||||||
|     private Integer sceneType; // 场景类型,为 null 时则表示全部 |     private Integer sceneType; // 场景类型,为 null 时则表示全部 | ||||||
|   | |||||||
| @@ -25,6 +25,4 @@ public class CrmBusinessRespVO extends CrmBusinessBaseVO { | |||||||
|     @Schema(description = "状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "跟进中") |     @Schema(description = "状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "跟进中") | ||||||
|     private String statusName; |     private String statusName; | ||||||
|  |  | ||||||
|     @Schema(description = "联系人商机关联ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32129") |  | ||||||
|     private Long businessContactId; |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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.contact.CrmContactDO; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | ||||||
| import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants; | 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.contact.CrmContactService; | ||||||
| import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; | ||||||
| import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | 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.validation.annotation.Validated; | ||||||
| import org.springframework.web.bind.annotation.*; | 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.io.IOException; | ||||||
| import java.util.Collections; | import java.util.Collections; | ||||||
| import java.util.List; | import java.util.List; | ||||||
| @@ -63,7 +59,7 @@ public class CrmContactController { | |||||||
|     private AdminUserApi adminUserApi; |     private AdminUserApi adminUserApi; | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmContactBusinessLinkService contactBusinessLinkService; |     private CrmContactBusinessService contactBusinessLinkService; | ||||||
|  |  | ||||||
|     @PostMapping("/create") |     @PostMapping("/create") | ||||||
|     @Operation(summary = "创建联系人") |     @Operation(summary = "创建联系人") | ||||||
| @@ -103,7 +99,7 @@ public class CrmContactController { | |||||||
|                 NumberUtil.parseLong(contact.getCreator()), contact.getOwnerUserId()))); |                 NumberUtil.parseLong(contact.getCreator()), contact.getOwnerUserId()))); | ||||||
|         // 2. 获取客户信息 |         // 2. 获取客户信息 | ||||||
|         List<CrmCustomerDO> customerList = customerService.getCustomerList( |         List<CrmCustomerDO> customerList = customerService.getCustomerList( | ||||||
|                 Collections.singletonList(contact.getCustomerId()), getLoginUserId()); |                 Collections.singletonList(contact.getCustomerId())); | ||||||
|         // 3. 直属上级 |         // 3. 直属上级 | ||||||
|         List<CrmContactDO> parentContactList = contactService.getContactList( |         List<CrmContactDO> parentContactList = contactService.getContactList( | ||||||
|                 Collections.singletonList(contact.getParentId()), getLoginUserId()); |                 Collections.singletonList(contact.getParentId()), getLoginUserId()); | ||||||
| @@ -148,23 +144,6 @@ public class CrmContactController { | |||||||
|                 convertDetailContactPage(pageResult).getList()); |                 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. 获取客户列表 |         // 1. 获取客户列表 | ||||||
|         List<CrmCustomerDO> crmCustomerDOList = customerService.getCustomerList( |         List<CrmCustomerDO> crmCustomerDOList = customerService.getCustomerList( | ||||||
|                 convertSet(contactList, CrmContactDO::getCustomerId), getLoginUserId()); |                 convertSet(contactList, CrmContactDO::getCustomerId)); | ||||||
|         // 2. 获取创建人、负责人列表 |         // 2. 获取创建人、负责人列表 | ||||||
|         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(contactList, |         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(contactList, | ||||||
|                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId()))); |                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId()))); | ||||||
| @@ -196,4 +175,22 @@ public class CrmContactController { | |||||||
|         return success(true); |         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); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -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; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -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; |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -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; | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -124,7 +124,7 @@ public class CrmContractController { | |||||||
|         } |         } | ||||||
|         // 1. 获取客户列表 |         // 1. 获取客户列表 | ||||||
|         List<CrmCustomerDO> customerList = customerService.getCustomerList( |         List<CrmCustomerDO> customerList = customerService.getCustomerList( | ||||||
|                 convertSet(contactList, CrmContractDO::getCustomerId), getLoginUserId()); |                 convertSet(contactList, CrmContractDO::getCustomerId)); | ||||||
|         // 2. 获取创建人、负责人列表 |         // 2. 获取创建人、负责人列表 | ||||||
|         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(contactList, |         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(contactList, | ||||||
|                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId()))); |                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId()))); | ||||||
|   | |||||||
| @@ -131,7 +131,7 @@ public class CrmReceivableController { | |||||||
|         } |         } | ||||||
|         // 1. 获取客户列表 |         // 1. 获取客户列表 | ||||||
|         List<CrmCustomerDO> customerList = customerService.getCustomerList( |         List<CrmCustomerDO> customerList = customerService.getCustomerList( | ||||||
|                 convertSet(receivableList, CrmReceivableDO::getCustomerId), getLoginUserId()); |                 convertSet(receivableList, CrmReceivableDO::getCustomerId)); | ||||||
|         // 2. 获取创建人、负责人列表 |         // 2. 获取创建人、负责人列表 | ||||||
|         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(receivableList, |         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(receivableList, | ||||||
|                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId()))); |                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId()))); | ||||||
|   | |||||||
| @@ -135,7 +135,7 @@ public class CrmReceivablePlanController { | |||||||
|         } |         } | ||||||
|         // 1. 获取客户列表 |         // 1. 获取客户列表 | ||||||
|         List<CrmCustomerDO> customerList = customerService.getCustomerList( |         List<CrmCustomerDO> customerList = customerService.getCustomerList( | ||||||
|                 convertSet(receivablePlanList, CrmReceivablePlanDO::getCustomerId), getLoginUserId()); |                 convertSet(receivablePlanList, CrmReceivablePlanDO::getCustomerId)); | ||||||
|         // 2. 获取创建人、负责人列表 |         // 2. 获取创建人、负责人列表 | ||||||
|         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(receivablePlanList, |         Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(receivablePlanList, | ||||||
|                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId()))); |                 contact -> Stream.of(NumberUtils.parseLong(contact.getCreator()), contact.getOwnerUserId()))); | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package cn.iocoder.yudao.module.crm.convert.contact; | package cn.iocoder.yudao.module.crm.convert.contact; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | 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.framework.ip.core.utils.AreaUtils; | ||||||
| import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; | 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.List; | ||||||
| import java.util.Map; | 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.CollectionUtils.convertMap; | ||||||
| import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; | import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; | ||||||
| @@ -55,16 +55,16 @@ public interface CrmContactConvert { | |||||||
|      * |      * | ||||||
|      * @param contactDO         联系人 |      * @param contactDO         联系人 | ||||||
|      * @param userMap           用户列表 |      * @param userMap           用户列表 | ||||||
|      * @param crmCustomerDOList 客户 |      * @param customerDOList 客户 | ||||||
|      * @return ContactRespVO |      * @return ContactRespVO | ||||||
|      */ |      */ | ||||||
|     default CrmContactRespVO convert(CrmContactDO contactDO, Map<Long, AdminUserRespDTO> userMap, List<CrmCustomerDO> crmCustomerDOList, |     default CrmContactRespVO convert(CrmContactDO contactDO, Map<Long, AdminUserRespDTO> userMap, | ||||||
|                                      List<CrmContactDO> contactList) { |                                      List<CrmCustomerDO> customerDOList, List<CrmContactDO> contactList) { | ||||||
|         CrmContactRespVO contactVO = convert(contactDO); |         CrmContactRespVO contactVO = convert(contactDO); | ||||||
|         setUserInfo(contactVO, userMap); |         setUserInfo(contactVO, userMap); | ||||||
|         Map<Long, CrmCustomerDO> ustomerMap = crmCustomerDOList.stream().collect(Collectors.toMap(CrmCustomerDO::getId, v -> v)); |         Map<Long, CrmCustomerDO> customerMap = CollectionUtils.convertMap(customerDOList, CrmCustomerDO::getId); | ||||||
|         Map<Long, CrmContactDO> contactMap = contactList.stream().collect(Collectors.toMap(CrmContactDO::getId, v -> v)); |         Map<Long, CrmContactDO> contactMap = CollectionUtils.convertMap(contactList, CrmContactDO::getId); | ||||||
|         findAndThen(ustomerMap, contactDO.getCustomerId(), customer -> contactVO.setCustomerName(customer.getName())); |         findAndThen(customerMap, contactDO.getCustomerId(), customer -> contactVO.setCustomerName(customer.getName())); | ||||||
|         findAndThen(contactMap, contactDO.getParentId(), contact -> contactVO.setParentName(contact.getName())); |         findAndThen(contactMap, contactDO.getParentId(), contact -> contactVO.setParentName(contact.getName())); | ||||||
|         return contactVO; |         return contactVO; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -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.framework.mybatis.core.dataobject.BaseDO; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | 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.KeySequence; | ||||||
| import com.baomidou.mybatisplus.annotation.TableId; | import com.baomidou.mybatisplus.annotation.TableId; | ||||||
| import com.baomidou.mybatisplus.annotation.TableName; | import com.baomidou.mybatisplus.annotation.TableName; | ||||||
| import lombok.*; | import lombok.*; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * CRM 联系人商机关联 DO |  * CRM 联系人与商机的关联 DO | ||||||
|  * |  * | ||||||
|  * @author 芋道源码 |  * @author 芋道源码 | ||||||
|  */ |  */ | ||||||
| @@ -21,7 +20,7 @@ import lombok.*; | |||||||
| @Builder | @Builder | ||||||
| @NoArgsConstructor | @NoArgsConstructor | ||||||
| @AllArgsConstructor | @AllArgsConstructor | ||||||
| public class CrmContactBusinessLinkDO extends BaseDO { | public class CrmContactBusinessDO extends BaseDO { | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 主键 |      * 主键 | ||||||
| @@ -35,6 +35,13 @@ public interface CrmBusinessMapper extends BaseMapperX<CrmBusinessDO> { | |||||||
|                 .orderByDesc(CrmBusinessDO::getId)); |                 .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)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     default PageResult<CrmBusinessDO> selectPage(CrmBusinessPageReqVO pageReqVO, Long userId) { |     default PageResult<CrmBusinessDO> selectPage(CrmBusinessPageReqVO pageReqVO, Long userId) { | ||||||
|         MPJLambdaWrapperX<CrmBusinessDO> query = new MPJLambdaWrapperX<>(); |         MPJLambdaWrapperX<CrmBusinessDO> query = new MPJLambdaWrapperX<>(); | ||||||
|         // 拼接数据权限的查询条件 |         // 拼接数据权限的查询条件 | ||||||
|   | |||||||
| @@ -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)); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -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); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -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.CrmBusinessPageReqVO; | ||||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO; | 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.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.business.CrmBusinessDO; | ||||||
|  | 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.dal.dataobject.customer.CrmCustomerDO; | ||||||
| import jakarta.validation.Valid; | import jakarta.validation.Valid; | ||||||
|  |  | ||||||
| @@ -78,10 +76,20 @@ public interface CrmBusinessService { | |||||||
|      * 数据权限:基于 {@link CrmCustomerDO} 读取 |      * 数据权限:基于 {@link CrmCustomerDO} 读取 | ||||||
|      * |      * | ||||||
|      * @param pageReqVO 分页查询 |      * @param pageReqVO 分页查询 | ||||||
|      * @return 联系人分页 |      * @return 商机分页 | ||||||
|      */ |      */ | ||||||
|     PageResult<CrmBusinessDO> getBusinessPageByCustomerId(CrmBusinessPageReqVO pageReqVO); |     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); |     void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId); | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 获取联系人商机列表 |  | ||||||
|      * @param pageReqVO 分页参数 |  | ||||||
|      * @return 联系人商机 |  | ||||||
|      */ |  | ||||||
|     PageResult<CrmBusinessRespVO> getBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO); |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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.CrmBusinessPageReqVO; | ||||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO; | 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.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.convert.business.CrmBusinessConvert; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | 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.CrmContactBusinessDO; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |  | ||||||
| import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper; | import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper; | ||||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||||
| import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | 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.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.contact.CrmContactService; | ||||||
| import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; | ||||||
| import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; | 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.Collection; | ||||||
| import java.util.List; | 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.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; | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -48,14 +41,13 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | |||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmBusinessMapper businessMapper; |     private CrmBusinessMapper businessMapper; | ||||||
|     @Resource |  | ||||||
|     private CrmCustomerService customerService; |  | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmPermissionService crmPermissionService; |     private CrmPermissionService permissionService; | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmContactService crmContactService; |     private CrmContactService contactService; | ||||||
|  |     @Resource | ||||||
|  |     private CrmContactBusinessService contactBusinessService; | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
| @@ -65,7 +57,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | |||||||
|         businessMapper.insert(business); |         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())); // 设置当前操作的人为负责人 |                 .setBizId(business.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人 | ||||||
|  |  | ||||||
|         // 返回 |         // 返回 | ||||||
| @@ -93,7 +85,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | |||||||
|         // 删除 |         // 删除 | ||||||
|         businessMapper.deleteById(id); |         businessMapper.deleteById(id); | ||||||
|         // 删除数据权限 |         // 删除数据权限 | ||||||
|         crmPermissionService.deletePermission(CrmBizTypeEnum.CRM_BUSINESS.getType(), id); |         permissionService.deletePermission(CrmBizTypeEnum.CRM_BUSINESS.getType(), id); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private CrmBusinessDO validateBusinessExists(Long id) { |     private CrmBusinessDO validateBusinessExists(Long id) { | ||||||
| @@ -129,6 +121,20 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | |||||||
|         return businessMapper.selectPageByCustomerId(pageReqVO); |         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 |     @Override | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
|     public void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId) { |     public void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId) { | ||||||
| @@ -136,36 +142,12 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | |||||||
|         validateBusinessExists(reqVO.getId()); |         validateBusinessExists(reqVO.getId()); | ||||||
|  |  | ||||||
|         // 2.1 数据权限转移 |         // 2.1 数据权限转移 | ||||||
|         crmPermissionService.transferPermission( |         permissionService.transferPermission( | ||||||
|                 CrmBusinessConvert.INSTANCE.convert(reqVO, userId).setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType())); |                 CrmBusinessConvert.INSTANCE.convert(reqVO, userId).setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType())); | ||||||
|         // 2.2 设置新的负责人 |         // 2.2 设置新的负责人 | ||||||
|         businessMapper.updateOwnerUserIdById(reqVO.getId(), reqVO.getNewOwnerUserId()); |         businessMapper.updateOwnerUserIdById(reqVO.getId(), reqVO.getNewOwnerUserId()); | ||||||
|  |  | ||||||
|         // 3. TODO 记录转移日志 |         // 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; |  | ||||||
|  |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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 cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||||
|  |  | ||||||
| import jakarta.validation.Valid; | import jakarta.validation.Valid; | ||||||
|  |  | ||||||
|  | import java.util.Collection; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -64,4 +66,12 @@ public interface CrmBusinessStatusService { | |||||||
|      */ |      */ | ||||||
|     List<CrmBusinessStatusDO> selectList(CrmBusinessStatusQueryVO queryVO); |     List<CrmBusinessStatusDO> selectList(CrmBusinessStatusQueryVO queryVO); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获得商机状态列表 | ||||||
|  |      * | ||||||
|  |      * @param ids 编号数组 | ||||||
|  |      * @return 商机状态列表 | ||||||
|  |      */ | ||||||
|  |     List<CrmBusinessStatusDO> getBusinessStatusList(Collection<Long> ids); | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ import org.springframework.validation.annotation.Validated; | |||||||
|  |  | ||||||
| import jakarta.annotation.Resource; | import jakarta.annotation.Resource; | ||||||
|  |  | ||||||
|  | import java.util.Collection; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||||
| @@ -77,4 +78,9 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService { | |||||||
|         return businessStatusMapper.selectList(queryVO); |         return businessStatusMapper.selectList(queryVO); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public List<CrmBusinessStatusDO> getBusinessStatusList(Collection<Long> ids) { | ||||||
|  |         return businessStatusMapper.selectBatchIds(ids); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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.CrmBusinessStatusTypeQueryVO; | ||||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO; | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | ||||||
|  |  | ||||||
| import jakarta.validation.Valid; | import jakarta.validation.Valid; | ||||||
|  |  | ||||||
|  | import java.util.Collection; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -63,4 +64,12 @@ public interface CrmBusinessStatusTypeService { | |||||||
|      */ |      */ | ||||||
|     List<CrmBusinessStatusTypeDO> selectList(CrmBusinessStatusTypeQueryVO queryVO); |     List<CrmBusinessStatusTypeDO> selectList(CrmBusinessStatusTypeQueryVO queryVO); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获得商机状态类型列表 | ||||||
|  |      * | ||||||
|  |      * @param ids 编号数组 | ||||||
|  |      * @return 商机状态类型列表 | ||||||
|  |      */ | ||||||
|  |     List<CrmBusinessStatusTypeDO> getBusinessStatusTypeList(Collection<Long> ids); | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -17,6 +17,8 @@ import org.springframework.transaction.annotation.Transactional; | |||||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||||
|  |  | ||||||
| import jakarta.annotation.Resource; | import jakarta.annotation.Resource; | ||||||
|  |  | ||||||
|  | import java.util.Collection; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||||
| @@ -118,4 +120,9 @@ public class CrmBusinessStatusTypeServiceImpl implements CrmBusinessStatusTypeSe | |||||||
|         return businessStatusTypeMapper.selectList(queryVO); |         return businessStatusTypeMapper.selectList(queryVO); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public List<CrmBusinessStatusTypeDO> getBusinessStatusTypeList(Collection<Long> ids) { | ||||||
|  |         return businessStatusTypeMapper.selectBatchIds(ids); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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); |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -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); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| } |  | ||||||
| @@ -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); | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -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); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -1,12 +1,10 @@ | |||||||
| package cn.iocoder.yudao.module.crm.service.contact; | package cn.iocoder.yudao.module.crm.service.contact; | ||||||
|  |  | ||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | 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.CrmContactCreateReqVO; | ||||||
| import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO; | 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.CrmContactTransferReqVO; | ||||||
| import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactUpdateReqVO; | 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.contact.CrmContactDO; | ||||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | ||||||
| import jakarta.validation.Valid; | import jakarta.validation.Valid; | ||||||
| @@ -90,12 +88,4 @@ public interface CrmContactService { | |||||||
|      */ |      */ | ||||||
|     void transferContact(CrmContactTransferReqVO reqVO, Long userId); |     void transferContact(CrmContactTransferReqVO reqVO, Long userId); | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 获取联系人商机关联分页列表 |  | ||||||
|      * @param reqVO 联系人 |  | ||||||
|      * @return 商机联系人关联列表 |  | ||||||
|      */ |  | ||||||
|     PageResult<CrmContactBusinessLinkDO> selectBusinessPageByContact(CrmContactBusinessLinkPageReqVO reqVO); |  | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,17 +5,9 @@ import cn.hutool.core.collection.ListUtil; | |||||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||||
| import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; | ||||||
| import cn.iocoder.yudao.module.crm.convert.contact.CrmContactConvert; | 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.dataobject.contact.CrmContactDO; | ||||||
| import cn.iocoder.yudao.module.crm.dal.mysql.contact.CrmContactMapper; | 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.dal.mysql.contactbusinesslink.CrmContactBusinessMapper; | ||||||
| import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; |  | ||||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||||
| import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | 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.framework.permission.core.annotations.CrmPermission; | ||||||
| @@ -56,7 +48,7 @@ public class CrmContactServiceImpl implements CrmContactService { | |||||||
|     private AdminUserApi adminUserApi; |     private AdminUserApi adminUserApi; | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private CrmContactBusinessLinkMapper contactBusinessLinkMapper; |     private CrmContactBusinessMapper contactBusinessLinkMapper; | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
| @@ -161,11 +153,4 @@ public class CrmContactServiceImpl implements CrmContactService { | |||||||
|         // 3. TODO 记录转移日志 |         // 3. TODO 记录转移日志 | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public PageResult<CrmContactBusinessLinkDO> selectBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO) { |  | ||||||
|         CrmContactBusinessLinkPageReqVO crmContactBusinessLinkPageReqVO = new CrmContactBusinessLinkPageReqVO(); |  | ||||||
|         crmContactBusinessLinkPageReqVO.setContactId(pageReqVO.getContactId()); |  | ||||||
|         return contactBusinessLinkMapper.selectPageByContact(crmContactBusinessLinkPageReqVO); |  | ||||||
|  |  | ||||||
|     } |  | ||||||
| } | } | ||||||
| @@ -56,7 +56,7 @@ public interface CrmCustomerService { | |||||||
|      * @return 客户列表 |      * @return 客户列表 | ||||||
|      * @author ljlleo |      * @author ljlleo | ||||||
|      */ |      */ | ||||||
|     List<CrmCustomerDO> getCustomerList(Collection<Long> ids, Long userId); |     List<CrmCustomerDO> getCustomerList(Collection<Long> ids); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 获得客户分页 |      * 获得客户分页 | ||||||
|   | |||||||
| @@ -116,11 +116,11 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public List<CrmCustomerDO> getCustomerList(Collection<Long> ids, Long userId) { |     public List<CrmCustomerDO> getCustomerList(Collection<Long> ids) { | ||||||
|         if (CollUtil.isEmpty(ids)) { |         if (CollUtil.isEmpty(ids)) { | ||||||
|             return Collections.emptyList(); |             return Collections.emptyList(); | ||||||
|         } |         } | ||||||
|         return customerMapper.selectBatchIds(ids, userId); |         return customerMapper.selectBatchIds(ids); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV