Commit e7bd2a568d466cbdfb7e1671ea3c1e8aee1c7a66

Authored by YunaiV
1 parent 53ebd39c

✨ CRM:增加商机关联联系人

yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/CrmContactController.java
... ... @@ -199,6 +199,15 @@ public class CrmContactController {
199 199 return success(true);
200 200 }
201 201  
  202 +
  203 + @PostMapping("/create-business-list2")
  204 + @Operation(summary = "创建联系人与商机的关联")
  205 + @PreAuthorize("@ss.hasPermission('crm:contact:create-business')")
  206 + public CommonResult<Boolean> createContactBusinessList2(@Valid @RequestBody CrmContactBusiness2ReqVO createReqVO) {
  207 + contactBusinessLinkService.createContactBusinessList2(createReqVO);
  208 + return success(true);
  209 + }
  210 +
202 211 @DeleteMapping("/delete-business-list")
203 212 @Operation(summary = "删除联系人与联系人的关联")
204 213 @PreAuthorize("@ss.hasPermission('crm:contact:delete-business')")
... ... @@ -207,4 +216,12 @@ public class CrmContactController {
207 216 return success(true);
208 217 }
209 218  
  219 + @DeleteMapping("/delete-business-list2")
  220 + @Operation(summary = "删除联系人与联系人的关联")
  221 + @PreAuthorize("@ss.hasPermission('crm:contact:delete-business')")
  222 + public CommonResult<Boolean> deleteContactBusinessList(@Valid @RequestBody CrmContactBusiness2ReqVO deleteReqVO) {
  223 + contactBusinessLinkService.deleteContactBusinessList2(deleteReqVO);
  224 + return success(true);
  225 + }
  226 +
210 227 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusiness2ReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.controller.admin.contact.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import jakarta.validation.constraints.NotNull;
  6 +import lombok.Data;
  7 +
  8 +import java.util.List;
  9 +
  10 +@Schema(description = "管理后台 - CRM 联系人商机 Request VO") // 【商机关联联系人】用于关联,取消关联的操作
  11 +@Data
  12 +public class CrmContactBusiness2ReqVO {
  13 +
  14 + @Schema(description = "商机编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7638")
  15 + @NotNull(message="商机不能为空")
  16 + private Long businessId;
  17 +
  18 + @Schema(description = "联系人编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "20878")
  19 + @NotEmpty(message="联系人数组不能为空")
  20 + private List<Long> contactIds;
  21 +
  22 +}
0 23 \ No newline at end of file
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactBusinessReqVO.java
... ... @@ -7,7 +7,7 @@ import lombok.Data;
7 7  
8 8 import java.util.List;
9 9  
10   -@Schema(description = "管理后台 - CRM 联系人商机 Request VO") // 用于关联,取消关联的操作
  10 +@Schema(description = "管理后台 - CRM 联系人商机 Request VO") // 【联系人关联商机】用于关联,取消关联的操作
11 11 @Data
12 12 public class CrmContactBusinessReqVO {
13 13  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contact/CrmContactBusinessMapper.java
... ... @@ -27,6 +27,12 @@ public interface CrmContactBusinessMapper extends BaseMapperX&lt;CrmContactBusiness
27 27 .in(CrmContactBusinessDO::getBusinessId, businessIds));
28 28 }
29 29  
  30 + default void deleteByBusinessIdAndContactId(Long businessId, List<Long> contactIds) {
  31 + delete(new LambdaQueryWrapper<CrmContactBusinessDO>()
  32 + .eq(CrmContactBusinessDO::getBusinessId, businessId)
  33 + .in(CrmContactBusinessDO::getContactId, contactIds));
  34 + }
  35 +
30 36 default List<CrmContactBusinessDO> selectListByContactId(Long contactId) {
31 37 return selectList(CrmContactBusinessDO::getContactId, contactId);
32 38 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessService.java
1 1 package cn.iocoder.yudao.module.crm.service.contact;
2 2  
  3 +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusiness2ReqVO;
3 4 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessReqVO;
4 5 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
5 6 import jakarta.validation.Valid;
... ... @@ -14,20 +15,34 @@ import java.util.List;
14 15 public interface CrmContactBusinessService {
15 16  
16 17 /**
17   - * 创建联系人与商机的关联
  18 + * 创建联系人与商机的关联【通过联系人,关联商机】
18 19 *
19 20 * @param createReqVO 创建信息
20 21 */
21 22 void createContactBusinessList(@Valid CrmContactBusinessReqVO createReqVO);
22 23  
23 24 /**
24   - * 删除联系人与商机的关联
  25 + * 创建联系人与商机的关联【通过商机,关联联系人】
  26 + *
  27 + * @param createReqVO 创建信息
  28 + */
  29 + void createContactBusinessList2(@Valid CrmContactBusiness2ReqVO createReqVO);
  30 +
  31 + /**
  32 + * 删除联系人与商机的关联【通过联系人,取关商机】
25 33 *
26 34 * @param deleteReqVO 删除信息
27 35 */
28 36 void deleteContactBusinessList(@Valid CrmContactBusinessReqVO deleteReqVO);
29 37  
30 38 /**
  39 + * 删除联系人与商机的关联【通过商机,取关联系人】
  40 + *
  41 + * @param deleteReqVO 删除信息
  42 + */
  43 + void deleteContactBusinessList2(@Valid CrmContactBusiness2ReqVO deleteReqVO);
  44 +
  45 + /**
31 46 * 删除联系人与商机的关联,基于联系人编号
32 47 *
33 48 * @param contactId 联系人编号
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactBusinessServiceImpl.java
1 1 package cn.iocoder.yudao.module.crm.service.contact;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusiness2ReqVO;
4 5 import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessReqVO;
5 6 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
6 7 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO;
... ... @@ -68,6 +69,32 @@ public class CrmContactBusinessServiceImpl implements CrmContactBusinessService
68 69 }
69 70  
70 71 @Override
  72 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#createReqVO.businessId", level = CrmPermissionLevelEnum.WRITE)
  73 + public void createContactBusinessList2(CrmContactBusiness2ReqVO createReqVO) {
  74 + CrmBusinessDO business = businessService.getBusiness(createReqVO.getBusinessId());
  75 + if (business == null) {
  76 + throw exception(BUSINESS_NOT_EXISTS);
  77 + }
  78 + // 遍历处理,考虑到一般数量不会太多,代码处理简单
  79 + List<CrmContactBusinessDO> saveDOList = new ArrayList<>();
  80 + createReqVO.getContactIds().forEach(contactId -> {
  81 + CrmContactDO contact = contactService.getContact(contactId);
  82 + if (contact == null) {
  83 + throw exception(CONTACT_NOT_EXISTS);
  84 + }
  85 + // 关联判重
  86 + if (contactBusinessMapper.selectByContactIdAndBusinessId(contactId, createReqVO.getBusinessId()) != null) {
  87 + return;
  88 + }
  89 + saveDOList.add(new CrmContactBusinessDO(null, contactId, createReqVO.getBusinessId()));
  90 + });
  91 + // 批量插入
  92 + if (CollUtil.isNotEmpty(saveDOList)) {
  93 + contactBusinessMapper.insertBatch(saveDOList);
  94 + }
  95 + }
  96 +
  97 + @Override
71 98 @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACT, bizId = "#deleteReqVO.contactId", level = CrmPermissionLevelEnum.WRITE)
72 99 public void deleteContactBusinessList(CrmContactBusinessReqVO deleteReqVO) {
73 100 CrmContactDO contact = contactService.getContact(deleteReqVO.getContactId());
... ... @@ -80,6 +107,18 @@ public class CrmContactBusinessServiceImpl implements CrmContactBusinessService
80 107 }
81 108  
82 109 @Override
  110 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#deleteReqVO.businessId", level = CrmPermissionLevelEnum.WRITE)
  111 + public void deleteContactBusinessList2(CrmContactBusiness2ReqVO deleteReqVO) {
  112 + CrmBusinessDO business = businessService.getBusiness(deleteReqVO.getBusinessId());
  113 + if (business == null) {
  114 + throw exception(BUSINESS_NOT_EXISTS);
  115 + }
  116 + // 直接删除
  117 + contactBusinessMapper.deleteByBusinessIdAndContactId(
  118 + deleteReqVO.getBusinessId(), deleteReqVO.getContactIds());
  119 + }
  120 +
  121 + @Override
83 122 @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACT, bizId = "#contactId", level = CrmPermissionLevelEnum.WRITE)
84 123 public void deleteContactBusinessByContactId(Long contactId) {
85 124 contactBusinessMapper.delete(CrmContactBusinessDO::getContactId, contactId);
... ...