Commit bd76ea59a795fb0b82ad0d6ee418076c21e20dbd
Merge remote-tracking branch 'origin/feature/crm' into develop
# Conflicts: # yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/CrmBusinessController.java # yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/CrmContactController.java # yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contactbusinesslink/CrmContactBusinessLinkController.java # yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java # yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java # yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkServiceImpl.java # yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactServiceImpl.java
Showing
19 changed files
with
193 additions
and
177 deletions
sql/mysql/optinal/crm.sql
| 1 | 1 | -- `ruoyi-vue-pro`.crm_contact_business_link definition |
| 2 | 2 | |
| 3 | -CREATE TABLE `crm_contact_business_link` ( | |
| 3 | +CREATE TABLE `crm_contact_business` ( | |
| 4 | 4 | `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', |
| 5 | 5 | `contact_id` int(11) DEFAULT NULL COMMENT '联系人id', |
| 6 | 6 | `business_id` int(11) DEFAULT NULL COMMENT '商机id', |
| ... | ... | @@ -10,6 +10,5 @@ CREATE TABLE `crm_contact_business_link` ( |
| 10 | 10 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 11 | 11 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 12 | 12 | `tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '租户编号', |
| 13 | - PRIMARY KEY (`id`), | |
| 14 | - UNIQUE KEY `crm_contact_business_link_un` (`contact_id`,`business_id`,`deleted`,`tenant_id`) | |
| 13 | + PRIMARY KEY (`id`) | |
| 15 | 14 | ) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='联系人商机关联表'; |
| 16 | 15 | \ No newline at end of file | ... | ... |
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 | - | |
| 27 | + ErrorCode CONTACT_BUSINESS_LINK_CREATE_EMPTY = new ErrorCode( 1_020_003_002, "联系人商机关联参数为空"); | |
| 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,11 +4,14 @@ 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; | |
| 7 | 8 | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| 8 | 9 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 9 | 10 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*; |
| 10 | 11 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO; |
| 11 | 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; | |
| 12 | 15 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; |
| 13 | 16 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| 14 | 17 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; |
| ... | ... | @@ -30,6 +33,7 @@ import org.springframework.web.bind.annotation.*; |
| 30 | 33 | |
| 31 | 34 | import java.io.IOException; |
| 32 | 35 | import java.util.List; |
| 36 | +import java.util.Map; | |
| 33 | 37 | import java.util.Objects; |
| 34 | 38 | import java.util.Set; |
| 35 | 39 | import java.util.stream.Collectors; |
| ... | ... | @@ -163,5 +167,34 @@ public class CrmBusinessController { |
| 163 | 167 | businessService.transferBusiness(reqVO, getLoginUserId()); |
| 164 | 168 | return success(true); |
| 165 | 169 | } |
| 166 | - | |
| 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 | + } | |
| 167 | 200 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessRespVO.java
| ... | ... | @@ -25,4 +25,6 @@ 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; | |
| 28 | 30 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/CrmContactController.java
| ... | ... | @@ -13,6 +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 | 17 | import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; |
| 17 | 18 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 18 | 19 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| ... | ... | @@ -29,6 +30,10 @@ import org.springframework.security.access.prepost.PreAuthorize; |
| 29 | 30 | import org.springframework.validation.annotation.Validated; |
| 30 | 31 | import org.springframework.web.bind.annotation.*; |
| 31 | 32 | |
| 33 | +import javax.annotation.Resource; | |
| 34 | +import javax.servlet.http.HttpServletResponse; | |
| 35 | +import javax.validation.Valid; | |
| 36 | +import javax.validation.constraints.NotEmpty; | |
| 32 | 37 | import java.io.IOException; |
| 33 | 38 | import java.util.Collections; |
| 34 | 39 | import java.util.List; |
| ... | ... | @@ -54,10 +59,12 @@ public class CrmContactController { |
| 54 | 59 | private CrmContactService contactService; |
| 55 | 60 | @Resource |
| 56 | 61 | private CrmCustomerService customerService; |
| 57 | - | |
| 58 | 62 | @Resource |
| 59 | 63 | private AdminUserApi adminUserApi; |
| 60 | 64 | |
| 65 | + @Resource | |
| 66 | + private CrmContactBusinessLinkService contactBusinessLinkService; | |
| 67 | + | |
| 61 | 68 | @PostMapping("/create") |
| 62 | 69 | @Operation(summary = "创建联系人") |
| 63 | 70 | @PreAuthorize("@ss.hasPermission('crm:contact:create')") |
| ... | ... | @@ -141,6 +148,23 @@ public class CrmContactController { |
| 141 | 148 | convertDetailContactPage(pageResult).getList()); |
| 142 | 149 | } |
| 143 | 150 | |
| 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 | + | |
| 144 | 168 | /** |
| 145 | 169 | * 转换成详细的联系人分页,即读取关联信息 |
| 146 | 170 | * | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contactbusinesslink/vo/CrmContactBusinessLinkPageReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkPageReqVO.java
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contactbusinesslink/vo/CrmContactBusinessLinkRespVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkRespVO.java
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contactbusinesslink/vo/CrmContactBusinessLinkSaveReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessLinkSaveReqVO.java
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contactbusinesslink/CrmContactBusinessLinkController.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink; | |
| 2 | - | |
| 3 | -import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 4 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | |
| 6 | -import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO; | |
| 7 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkPageReqVO; | |
| 8 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkRespVO; | |
| 9 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkSaveReqVO; | |
| 10 | -import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | |
| 11 | -import cn.iocoder.yudao.module.crm.dal.dataobject.contactbusinesslink.CrmContactBusinessLinkDO; | |
| 12 | -import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; | |
| 13 | -import cn.iocoder.yudao.module.crm.service.contactbusinesslink.CrmContactBusinessLinkService; | |
| 14 | -import io.swagger.v3.oas.annotations.Operation; | |
| 15 | -import io.swagger.v3.oas.annotations.Parameter; | |
| 16 | -import io.swagger.v3.oas.annotations.tags.Tag; | |
| 17 | -import org.springframework.security.access.prepost.PreAuthorize; | |
| 18 | -import org.springframework.transaction.annotation.Transactional; | |
| 19 | -import org.springframework.validation.annotation.Validated; | |
| 20 | -import org.springframework.web.bind.annotation.*; | |
| 21 | - | |
| 22 | -import jakarta.annotation.Resource; | |
| 23 | -import jakarta.validation.Valid; | |
| 24 | -import java.util.List; | |
| 25 | - | |
| 26 | -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | |
| 27 | -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | |
| 28 | -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS; | |
| 29 | - | |
| 30 | -@Tag(name = "管理后台 - CRM 联系人商机关联") | |
| 31 | -@RestController | |
| 32 | -@RequestMapping("/crm/contact-business-link") | |
| 33 | -@Validated | |
| 34 | -public class CrmContactBusinessLinkController { | |
| 35 | - | |
| 36 | - @Resource | |
| 37 | - private CrmContactBusinessLinkService contactBusinessLinkService; | |
| 38 | - @Resource | |
| 39 | - private CrmBusinessService crmBusinessService; | |
| 40 | - | |
| 41 | - // TODO @zyna:createContactBusinessLink 和 createContactBusinessLinkBatch 是不是合并成一个接口?contactId、List<businessId> | |
| 42 | - @PostMapping("/create") | |
| 43 | - @Operation(summary = "创建联系人商机关联") | |
| 44 | - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:create')") | |
| 45 | - public CommonResult<Long> createContactBusinessLink(@Valid @RequestBody CrmContactBusinessLinkSaveReqVO createReqVO) { | |
| 46 | - return success(contactBusinessLinkService.createContactBusinessLink(createReqVO)); | |
| 47 | - } | |
| 48 | - | |
| 49 | - @PostMapping("/create-batch") | |
| 50 | - @Operation(summary = "创建联系人商机关联") | |
| 51 | - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:create')") | |
| 52 | - @Transactional(rollbackFor = Exception.class) | |
| 53 | - public CommonResult<Boolean> createContactBusinessLinkBatch( | |
| 54 | - @Valid @RequestBody List<CrmContactBusinessLinkSaveReqVO> createReqVO) { | |
| 55 | - createReqVO.stream().forEach(item -> { | |
| 56 | - CrmBusinessDO crmBusinessDO = crmBusinessService.getBusiness(item.getBusinessId()); | |
| 57 | - if(crmBusinessDO == null){ | |
| 58 | - throw exception(BUSINESS_NOT_EXISTS); | |
| 59 | - } | |
| 60 | - }); | |
| 61 | - contactBusinessLinkService.createContactBusinessLinkBatch(createReqVO); | |
| 62 | - return success(true); | |
| 63 | - } | |
| 64 | - | |
| 65 | - // TODO @zyna:这个接口是不是可以删除掉了哈?应该不存在更新。 | |
| 66 | - @PutMapping("/update") | |
| 67 | - @Operation(summary = "更新联系人商机关联") | |
| 68 | - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:update')") | |
| 69 | - public CommonResult<Boolean> updateContactBusinessLink(@Valid @RequestBody CrmContactBusinessLinkSaveReqVO updateReqVO) { | |
| 70 | - contactBusinessLinkService.updateContactBusinessLink(updateReqVO); | |
| 71 | - return success(true); | |
| 72 | - } | |
| 73 | - | |
| 74 | - // TODO @zyna:删除,是不是传递 ids? | |
| 75 | - @DeleteMapping("/delete-batch") | |
| 76 | - @Operation(summary = "批量删除联系人商机关联") | |
| 77 | - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:delete')") | |
| 78 | - public CommonResult<Boolean> deleteContactBusinessLinkBatch(@Valid @RequestBody List<CrmContactBusinessLinkSaveReqVO> deleteList) { | |
| 79 | - contactBusinessLinkService.deleteContactBusinessLink(deleteList); | |
| 80 | - return success(true); | |
| 81 | - } | |
| 82 | - | |
| 83 | - // TODO @zyna:这个接口是不是可以删除掉了哈?应该不存在单个读取; | |
| 84 | - @GetMapping("/get") | |
| 85 | - @Operation(summary = "获得联系人商机关联") | |
| 86 | - @Parameter(name = "id", description = "编号", required = true, example = "1024") | |
| 87 | - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:query')") | |
| 88 | - public CommonResult<CrmContactBusinessLinkRespVO> getContactBusinessLink(@RequestParam("id") Long id) { | |
| 89 | - CrmContactBusinessLinkDO contactBusinessLink = contactBusinessLinkService.getContactBusinessLink(id); | |
| 90 | - return success(BeanUtils.toBean(contactBusinessLink, CrmContactBusinessLinkRespVO.class)); | |
| 91 | - } | |
| 92 | - | |
| 93 | - // TODO @zyna:这个可以转化下,使用客户编号去查询,就是使用 CrmBusinessController 的 getBusinessPageByCustomer 接口;目的是:复用 | |
| 94 | - @GetMapping("/page-by-contact") | |
| 95 | - @Operation(summary = "获得联系人商机关联") | |
| 96 | - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:query')") | |
| 97 | - public CommonResult<PageResult<CrmBusinessRespVO>> getContactBusinessLinkByContact( | |
| 98 | - @Valid CrmContactBusinessLinkPageReqVO pageReqVO) { | |
| 99 | - PageResult<CrmBusinessRespVO> contactBusinessLink = contactBusinessLinkService.getContactBusinessLinkPageByContact(pageReqVO); | |
| 100 | - return success(contactBusinessLink); | |
| 101 | - } | |
| 102 | - | |
| 103 | - // TODO @zyna:这个优化下,搞到 CrmBusinessController 里去,加一个 CrmBusinessController 的 getBusinessPageByContact 接口;目的是: | |
| 104 | - @GetMapping("/page") | |
| 105 | - @Operation(summary = "获得联系人商机关联分页") | |
| 106 | - @PreAuthorize("@ss.hasPermission('crm:contact-business-link:query')") | |
| 107 | - public CommonResult<PageResult<CrmContactBusinessLinkRespVO>> getContactBusinessLinkPage( | |
| 108 | - @Valid CrmContactBusinessLinkPageReqVO pageReqVO) { | |
| 109 | - PageResult<CrmContactBusinessLinkDO> pageResult = contactBusinessLinkService.getContactBusinessLinkPage(pageReqVO); | |
| 110 | - return success(BeanUtils.toBean(pageResult, CrmContactBusinessLinkRespVO.class)); | |
| 111 | - } | |
| 112 | - | |
| 113 | - // TODO @zyna:最终梳理完后,应该就 2 个接口,要不直接合并到 CrmContactController 中,不作为独立模块,就关联、接触关联。其实和 user 设置它有哪些岗位、部门是类似的。 | |
| 114 | - | |
| 115 | -} | |
| 116 | 0 | \ No newline at end of file |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/CrmContactConvert.java
| ... | ... | @@ -76,12 +76,12 @@ public interface CrmContactConvert { |
| 76 | 76 | Map<Long, CrmCustomerDO> customerMap = convertMap(customerList, CrmCustomerDO::getId); |
| 77 | 77 | result.forEach(item -> { |
| 78 | 78 | setUserInfo(item, userMap); |
| 79 | - findAndThen(customerMap, item.getCustomerId(), customer -> { // TODO @zyna:这里的 { 可以去掉 | |
| 80 | - item.setCustomerName(customer.getName()); | |
| 81 | - }); | |
| 82 | - findAndThen(parentContactMap, item.getParentId(), contactDO -> { // TODO @zyna:这里的 { 可以去掉 | |
| 83 | - item.setParentName(contactDO.getName()); | |
| 84 | - }); | |
| 79 | + findAndThen(customerMap, item.getCustomerId(), customer -> | |
| 80 | + item.setCustomerName(customer.getName()) | |
| 81 | + ); | |
| 82 | + findAndThen(parentContactMap, item.getParentId(), contactDO -> | |
| 83 | + item.setParentName(contactDO.getName()) | |
| 84 | + ); | |
| 85 | 85 | }); |
| 86 | 86 | return result; |
| 87 | 87 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contactbusinessslink/CrmContactBusinessLinkConvert.java deleted
| 1 | -package cn.iocoder.yudao.module.crm.convert.contactbusinessslink; | |
| 2 | - | |
| 3 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkSaveReqVO; | |
| 4 | -import cn.iocoder.yudao.module.crm.dal.dataobject.contactbusinesslink.CrmContactBusinessLinkDO; | |
| 5 | -import org.mapstruct.Mapper; | |
| 6 | -import org.mapstruct.factory.Mappers; | |
| 7 | - | |
| 8 | -import java.util.List; | |
| 9 | - | |
| 10 | -// TODO @zyna:使用 BeanUtils 慢慢替代现有的 mapstruct 哈 | |
| 11 | -@Mapper | |
| 12 | -public interface CrmContactBusinessLinkConvert { | |
| 13 | - CrmContactBusinessLinkConvert INSTANCE = Mappers.getMapper(CrmContactBusinessLinkConvert.class); | |
| 14 | - CrmContactBusinessLinkDO convert(CrmContactBusinessLinkSaveReqVO bean); | |
| 15 | - List<CrmContactBusinessLinkDO> convert(List<CrmContactBusinessLinkSaveReqVO> bean); | |
| 16 | -} |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contactbusinesslink/CrmContactBusinessLinkDO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/CrmContactBusinessLinkDO.java
| 1 | -package cn.iocoder.yudao.module.crm.dal.dataobject.contactbusinesslink; | |
| 1 | +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; |
| ... | ... | @@ -8,14 +8,13 @@ import com.baomidou.mybatisplus.annotation.TableId; |
| 8 | 8 | import com.baomidou.mybatisplus.annotation.TableName; |
| 9 | 9 | import lombok.*; |
| 10 | 10 | |
| 11 | -// TODO @zyna:可以放到 contact 包下 | |
| 12 | 11 | /** |
| 13 | 12 | * CRM 联系人商机关联 DO |
| 14 | 13 | * |
| 15 | 14 | * @author 芋道源码 |
| 16 | 15 | */ |
| 17 | -@TableName("crm_contact_business_link") | |
| 18 | -@KeySequence("crm_contact_business_link_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 16 | +@TableName("crm_contact_business") | |
| 17 | +@KeySequence("crm_contact_business_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 | |
| 19 | 18 | @Data |
| 20 | 19 | @EqualsAndHashCode(callSuper = true) |
| 21 | 20 | @ToString(callSuper = true) | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contactbusinesslink/CrmContactBusinessLinkMapper.java
| ... | ... | @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink; |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 6 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkPageReqVO; | |
| 7 | -import cn.iocoder.yudao.module.crm.dal.dataobject.contactbusinesslink.CrmContactBusinessLinkDO; | |
| 6 | +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO; | |
| 7 | +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO; | |
| 8 | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 | |
| 10 | 10 | /** |
| ... | ... | @@ -21,7 +21,7 @@ public interface CrmContactBusinessLinkMapper extends BaseMapperX<CrmContactBusi |
| 21 | 21 | .eqIfPresent(CrmContactBusinessLinkDO::getBusinessId, reqVO.getBusinessId()) |
| 22 | 22 | .betweenIfPresent(CrmContactBusinessLinkDO::getCreateTime, reqVO.getCreateTime()) |
| 23 | 23 | .orderByDesc(CrmContactBusinessLinkDO::getId)); |
| 24 | - } // TODO @zyna:方法和方法之间要有空行 | |
| 24 | + } | |
| 25 | 25 | default PageResult<CrmContactBusinessLinkDO> selectPageByContact(CrmContactBusinessLinkPageReqVO reqVO) { |
| 26 | 26 | return selectPage(reqVO, new LambdaQueryWrapperX<CrmContactBusinessLinkDO>() |
| 27 | 27 | .eqIfPresent(CrmContactBusinessLinkDO::getContactId, reqVO.getContactId()) | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java
| ... | ... | @@ -5,6 +5,9 @@ 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; | |
| 8 | 11 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| 9 | 12 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 10 | 13 | import jakarta.validation.Valid; |
| ... | ... | @@ -87,4 +90,10 @@ public interface CrmBusinessService { |
| 87 | 90 | */ |
| 88 | 91 | void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId); |
| 89 | 92 | |
| 93 | + /** | |
| 94 | + * 获取联系人商机列表 | |
| 95 | + * @param pageReqVO 分页参数 | |
| 96 | + * @return 联系人商机 | |
| 97 | + */ | |
| 98 | + PageResult<CrmBusinessRespVO> getBusinessPageByContact(CrmContactBusinessLinkPageReqVO pageReqVO); | |
| 90 | 99 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
| ... | ... | @@ -7,13 +7,21 @@ 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; | |
| 10 | 15 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; |
| 11 | 16 | 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 | 19 | import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper; |
| 13 | 20 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 14 | 21 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 15 | 22 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; |
| 16 | 23 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 24 | +import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; | |
| 17 | 25 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 18 | 26 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| 19 | 27 | import jakarta.annotation.Resource; |
| ... | ... | @@ -23,6 +31,8 @@ import org.springframework.validation.annotation.Validated; |
| 23 | 31 | |
| 24 | 32 | import java.util.Collection; |
| 25 | 33 | import java.util.List; |
| 34 | +import java.util.Map; | |
| 35 | +import java.util.Set; | |
| 26 | 36 | |
| 27 | 37 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 28 | 38 | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS; |
| ... | ... | @@ -44,6 +54,9 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { |
| 44 | 54 | @Resource |
| 45 | 55 | private CrmPermissionService crmPermissionService; |
| 46 | 56 | |
| 57 | + @Resource | |
| 58 | + private CrmContactService crmContactService; | |
| 59 | + | |
| 47 | 60 | @Override |
| 48 | 61 | @Transactional(rollbackFor = Exception.class) |
| 49 | 62 | public Long createBusiness(CrmBusinessCreateReqVO createReqVO, Long userId) { |
| ... | ... | @@ -130,5 +143,29 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { |
| 130 | 143 | |
| 131 | 144 | // 3. TODO 记录转移日志 |
| 132 | 145 | } |
| 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; | |
| 133 | 169 | |
| 170 | + } | |
| 134 | 171 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contactbusinesslink/CrmContactBusinessLinkService.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkService.java
| 1 | -package cn.iocoder.yudao.module.crm.service.contactbusinesslink; | |
| 1 | +package cn.iocoder.yudao.module.crm.service.contact; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO; |
| 5 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkPageReqVO; | |
| 6 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkSaveReqVO; | |
| 7 | -import cn.iocoder.yudao.module.crm.dal.dataobject.contactbusinesslink.CrmContactBusinessLinkDO; | |
| 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 | 8 | |
| 9 | 9 | import jakarta.validation.Valid; |
| 10 | 10 | import java.util.List; |
| ... | ... | @@ -41,9 +41,9 @@ public interface CrmContactBusinessLinkService { |
| 41 | 41 | /** |
| 42 | 42 | * 删除联系人商机关联 |
| 43 | 43 | * |
| 44 | - * @param createReqVO 删除列表 | |
| 44 | + * @param businessContactIds 删除列表 | |
| 45 | 45 | */ |
| 46 | - void deleteContactBusinessLink(@Valid List<CrmContactBusinessLinkSaveReqVO> createReqVO); | |
| 46 | + void deleteContactBusinessLink(@Valid List<Long> businessContactIds); | |
| 47 | 47 | |
| 48 | 48 | /** |
| 49 | 49 | * 获得联系人商机关联 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contactbusinesslink/CrmContactBusinessLinkServiceImpl.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessLinkServiceImpl.java
| 1 | -package cn.iocoder.yudao.module.crm.service.contactbusinesslink; | |
| 1 | +package cn.iocoder.yudao.module.crm.service.contact; | |
| 2 | 2 | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 4 | +import cn.hutool.core.lang.Assert; | |
| 3 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | 6 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 5 | 7 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 6 | 8 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 7 | 9 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO; |
| 8 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkPageReqVO; | |
| 9 | -import cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo.CrmContactBusinessLinkSaveReqVO; | |
| 10 | +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO; | |
| 11 | +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkSaveReqVO; | |
| 10 | 12 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; |
| 11 | -import cn.iocoder.yudao.module.crm.convert.contactbusinessslink.CrmContactBusinessLinkConvert; | |
| 12 | 13 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| 13 | -import cn.iocoder.yudao.module.crm.dal.dataobject.contactbusinesslink.CrmContactBusinessLinkDO; | |
| 14 | +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO; | |
| 15 | +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; | |
| 14 | 16 | import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessLinkMapper; |
| 15 | 17 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 16 | 18 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 17 | 19 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; |
| 20 | +import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants; | |
| 18 | 21 | import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; |
| 19 | -import jakarta.annotation.Resource; | |
| 22 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
| 20 | 23 | import org.springframework.stereotype.Service; |
| 21 | 24 | import org.springframework.validation.annotation.Validated; |
| 22 | 25 | |
| 26 | +import javax.annotation.Resource; | |
| 27 | +import java.util.ArrayList; | |
| 23 | 28 | import java.util.List; |
| 24 | 29 | |
| 25 | 30 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 26 | 31 | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| 32 | +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS; | |
| 27 | 33 | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTACT_BUSINESS_LINK_NOT_EXISTS; |
| 28 | 34 | |
| 29 | 35 | // TODO @puhui999:数据权限的校验;每个操作; |
| ... | ... | @@ -41,6 +47,9 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink |
| 41 | 47 | @Resource |
| 42 | 48 | private CrmBusinessService crmBusinessService; |
| 43 | 49 | |
| 50 | + @Resource | |
| 51 | + private CrmContactService crmContactService; | |
| 52 | + | |
| 44 | 53 | @Override |
| 45 | 54 | public Long createContactBusinessLink(CrmContactBusinessLinkSaveReqVO createReqVO) { |
| 46 | 55 | CrmContactBusinessLinkDO contactBusinessLink = BeanUtils.toBean(createReqVO, CrmContactBusinessLinkDO.class); |
| ... | ... | @@ -51,14 +60,26 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink |
| 51 | 60 | @Override |
| 52 | 61 | public void createContactBusinessLinkBatch(List<CrmContactBusinessLinkSaveReqVO> createReqVOList) { |
| 53 | 62 | // 插入 |
| 54 | - // TODO @zyna:如果已经关联过,不用重复插入; | |
| 55 | - // TODO @zyna:contact 和 business 存在校验,挪到这里,Controller 不用 @Transactional 注解,添加到这里哈。尽量业务都在 Service; | |
| 56 | - List<CrmContactBusinessLinkDO> saveDoList = CrmContactBusinessLinkConvert.INSTANCE.convert(createReqVOList); | |
| 63 | + CrmContactDO contactDO = crmContactService.getContact(createReqVOList.stream().findFirst().get().getContactId()); | |
| 64 | + Assert.notNull(contactDO,ErrorCodeConstants.CONTACT_NOT_EXISTS.getMsg()); | |
| 65 | + List<CrmContactBusinessLinkDO> saveDoList = new ArrayList<CrmContactBusinessLinkDO>(); | |
| 66 | + createReqVOList.forEach(item -> { | |
| 67 | + CrmBusinessDO crmBusinessDO = crmBusinessService.getBusiness(item.getBusinessId()); | |
| 68 | + if(crmBusinessDO == null){ | |
| 69 | + throw exception(BUSINESS_NOT_EXISTS); | |
| 70 | + } | |
| 71 | + // 判重 | |
| 72 | + CrmContactBusinessLinkDO crmContactBusinessLinkDO = contactBusinessLinkMapper.selectOne(new LambdaQueryWrapper<CrmContactBusinessLinkDO>() | |
| 73 | + .eq(CrmContactBusinessLinkDO::getBusinessId,item.getBusinessId()) | |
| 74 | + .eq(CrmContactBusinessLinkDO::getContactId,item.getContactId())); | |
| 75 | + if(crmContactBusinessLinkDO == null){ | |
| 76 | + saveDoList.add(BeanUtils.toBean(item,CrmContactBusinessLinkDO.class)); | |
| 77 | + } | |
| 78 | + }); | |
| 57 | 79 | contactBusinessLinkMapper.insertBatch(saveDoList); |
| 58 | 80 | } |
| 59 | 81 | |
| 60 | 82 | @Override |
| 61 | - @CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.WRITE) | |
| 62 | 83 | public void updateContactBusinessLink(CrmContactBusinessLinkSaveReqVO updateReqVO) { |
| 63 | 84 | // 校验存在 |
| 64 | 85 | validateContactBusinessLinkExists(updateReqVO.getId()); |
| ... | ... | @@ -68,14 +89,9 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink |
| 68 | 89 | } |
| 69 | 90 | |
| 70 | 91 | @Override |
| 71 | - public void deleteContactBusinessLink(List<CrmContactBusinessLinkSaveReqVO> createReqVO) { | |
| 92 | + public void deleteContactBusinessLink(List<Long> businessContactIds) { | |
| 72 | 93 | // 删除 |
| 73 | - createReqVO.forEach(item -> { | |
| 74 | - contactBusinessLinkMapper.delete(new LambdaQueryWrapperX<CrmContactBusinessLinkDO>() | |
| 75 | - .eq(CrmContactBusinessLinkDO::getBusinessId,item.getBusinessId()) | |
| 76 | - .eq(CrmContactBusinessLinkDO::getContactId,item.getContactId()) | |
| 77 | - .eq(CrmContactBusinessLinkDO::getDeleted,0)); | |
| 78 | - }); | |
| 94 | + contactBusinessLinkMapper.deleteBatchIds(businessContactIds); | |
| 79 | 95 | } |
| 80 | 96 | |
| 81 | 97 | private void validateContactBusinessLinkExists(Long id) { | ... | ... |
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; | |
| 4 | 5 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactCreateReqVO; |
| 5 | 6 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO; |
| 6 | 7 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactTransferReqVO; |
| 7 | 8 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactUpdateReqVO; |
| 9 | +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO; | |
| 8 | 10 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; |
| 9 | 11 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 10 | 12 | import jakarta.validation.Valid; |
| ... | ... | @@ -88,4 +90,12 @@ public interface CrmContactService { |
| 88 | 90 | */ |
| 89 | 91 | void transferContact(CrmContactTransferReqVO reqVO, Long userId); |
| 90 | 92 | |
| 93 | + | |
| 94 | + /** | |
| 95 | + * 获取联系人商机关联分页列表 | |
| 96 | + * @param reqVO 联系人 | |
| 97 | + * @return 商机联系人关联列表 | |
| 98 | + */ | |
| 99 | + PageResult<CrmContactBusinessLinkDO> selectBusinessPageByContact(CrmContactBusinessLinkPageReqVO reqVO); | |
| 100 | + | |
| 91 | 101 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactServiceImpl.java
| ... | ... | @@ -5,8 +5,17 @@ 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; | |
| 8 | 15 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; |
| 9 | 16 | 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 | 19 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 11 | 20 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 12 | 21 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; |
| ... | ... | @@ -43,10 +52,12 @@ public class CrmContactServiceImpl implements CrmContactService { |
| 43 | 52 | private CrmCustomerService customerService; |
| 44 | 53 | @Resource |
| 45 | 54 | private CrmPermissionService crmPermissionService; |
| 46 | - | |
| 47 | 55 | @Resource |
| 48 | 56 | private AdminUserApi adminUserApi; |
| 49 | 57 | |
| 58 | + @Resource | |
| 59 | + private CrmContactBusinessLinkMapper contactBusinessLinkMapper; | |
| 60 | + | |
| 50 | 61 | @Override |
| 51 | 62 | @Transactional(rollbackFor = Exception.class) |
| 52 | 63 | public Long createContact(CrmContactCreateReqVO createReqVO, Long userId) { |
| ... | ... | @@ -150,4 +161,11 @@ public class CrmContactServiceImpl implements CrmContactService { |
| 150 | 161 | // 3. TODO 记录转移日志 |
| 151 | 162 | } |
| 152 | 163 | |
| 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 | + } | |
| 153 | 171 | } | ... | ... |