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 | -- `ruoyi-vue-pro`.crm_contact_business_link definition | 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 | `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', | 4 | `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', |
| 5 | `contact_id` int(11) DEFAULT NULL COMMENT '联系人id', | 5 | `contact_id` int(11) DEFAULT NULL COMMENT '联系人id', |
| 6 | `business_id` int(11) DEFAULT NULL COMMENT '商机id', | 6 | `business_id` int(11) DEFAULT NULL COMMENT '商机id', |
| @@ -10,6 +10,5 @@ CREATE TABLE `crm_contact_business_link` ( | @@ -10,6 +10,5 @@ CREATE TABLE `crm_contact_business_link` ( | ||
| 10 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', | 10 | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
| 11 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', | 11 | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', |
| 12 | `tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '租户编号', | 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 | ) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='联系人商机关联表'; | 14 | ) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='联系人商机关联表'; |
| 16 | \ No newline at end of file | 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,7 +24,7 @@ public interface ErrorCodeConstants { | ||
| 24 | // ========== 联系人管理 1-020-003-000 ========== | 24 | // ========== 联系人管理 1-020-003-000 ========== |
| 25 | ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_020_003_000, "联系人不存在"); | 25 | ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_020_003_000, "联系人不存在"); |
| 26 | ErrorCode CONTACT_BUSINESS_LINK_NOT_EXISTS = new ErrorCode( 1_020_003_001, "联系人商机关联不存在"); | 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 | // ========== 回款 1-020-004-000 ========== | 28 | // ========== 回款 1-020-004-000 ========== |
| 29 | ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_020_004_000, "回款不存在"); | 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,11 +4,14 @@ import cn.hutool.core.collection.CollUtil; | ||
| 4 | import cn.hutool.core.lang.Assert; | 4 | import cn.hutool.core.lang.Assert; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 7 | +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||
| 7 | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | 8 | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| 8 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | 9 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 9 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*; | 10 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*; |
| 10 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO; | 11 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO; |
| 11 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO; | 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 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; | 15 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; |
| 13 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | 16 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| 14 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | 17 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; |
| @@ -30,6 +33,7 @@ import org.springframework.web.bind.annotation.*; | @@ -30,6 +33,7 @@ import org.springframework.web.bind.annotation.*; | ||
| 30 | 33 | ||
| 31 | import java.io.IOException; | 34 | import java.io.IOException; |
| 32 | import java.util.List; | 35 | import java.util.List; |
| 36 | +import java.util.Map; | ||
| 33 | import java.util.Objects; | 37 | import java.util.Objects; |
| 34 | import java.util.Set; | 38 | import java.util.Set; |
| 35 | import java.util.stream.Collectors; | 39 | import java.util.stream.Collectors; |
| @@ -163,5 +167,34 @@ public class CrmBusinessController { | @@ -163,5 +167,34 @@ public class CrmBusinessController { | ||
| 163 | businessService.transferBusiness(reqVO, getLoginUserId()); | 167 | businessService.transferBusiness(reqVO, getLoginUserId()); |
| 164 | return success(true); | 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,4 +25,6 @@ public class CrmBusinessRespVO extends CrmBusinessBaseVO { | ||
| 25 | @Schema(description = "状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "跟进中") | 25 | @Schema(description = "状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "跟进中") |
| 26 | private String statusName; | 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,6 +13,7 @@ import cn.iocoder.yudao.module.crm.convert.contact.CrmContactConvert; | ||
| 13 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; | 13 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; |
| 14 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | 14 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 15 | import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants; | 15 | import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants; |
| 16 | +import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessLinkService; | ||
| 16 | import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; | 17 | import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; |
| 17 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; | 18 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 18 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | 19 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| @@ -29,6 +30,10 @@ import org.springframework.security.access.prepost.PreAuthorize; | @@ -29,6 +30,10 @@ import org.springframework.security.access.prepost.PreAuthorize; | ||
| 29 | import org.springframework.validation.annotation.Validated; | 30 | import org.springframework.validation.annotation.Validated; |
| 30 | import org.springframework.web.bind.annotation.*; | 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 | import java.io.IOException; | 37 | import java.io.IOException; |
| 33 | import java.util.Collections; | 38 | import java.util.Collections; |
| 34 | import java.util.List; | 39 | import java.util.List; |
| @@ -54,10 +59,12 @@ public class CrmContactController { | @@ -54,10 +59,12 @@ public class CrmContactController { | ||
| 54 | private CrmContactService contactService; | 59 | private CrmContactService contactService; |
| 55 | @Resource | 60 | @Resource |
| 56 | private CrmCustomerService customerService; | 61 | private CrmCustomerService customerService; |
| 57 | - | ||
| 58 | @Resource | 62 | @Resource |
| 59 | private AdminUserApi adminUserApi; | 63 | private AdminUserApi adminUserApi; |
| 60 | 64 | ||
| 65 | + @Resource | ||
| 66 | + private CrmContactBusinessLinkService contactBusinessLinkService; | ||
| 67 | + | ||
| 61 | @PostMapping("/create") | 68 | @PostMapping("/create") |
| 62 | @Operation(summary = "创建联系人") | 69 | @Operation(summary = "创建联系人") |
| 63 | @PreAuthorize("@ss.hasPermission('crm:contact:create')") | 70 | @PreAuthorize("@ss.hasPermission('crm:contact:create')") |
| @@ -141,6 +148,23 @@ public class CrmContactController { | @@ -141,6 +148,23 @@ public class CrmContactController { | ||
| 141 | convertDetailContactPage(pageResult).getList()); | 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
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo; | 1 | +package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
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
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo; | 1 | +package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; |
| 2 | 2 | ||
| 3 | import com.alibaba.excel.annotation.ExcelProperty; | 3 | import com.alibaba.excel.annotation.ExcelProperty; |
| 4 | import io.swagger.v3.oas.annotations.media.Schema; | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
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
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.contactbusinesslink.vo; | 1 | +package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; |
| 2 | 2 | ||
| 3 | import io.swagger.v3.oas.annotations.media.Schema; | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | import lombok.Data; | 4 | import lombok.Data; |
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 | \ No newline at end of file | 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,12 +76,12 @@ public interface CrmContactConvert { | ||
| 76 | Map<Long, CrmCustomerDO> customerMap = convertMap(customerList, CrmCustomerDO::getId); | 76 | Map<Long, CrmCustomerDO> customerMap = convertMap(customerList, CrmCustomerDO::getId); |
| 77 | result.forEach(item -> { | 77 | result.forEach(item -> { |
| 78 | setUserInfo(item, userMap); | 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 | return result; | 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 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | 4 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| @@ -8,14 +8,13 @@ import com.baomidou.mybatisplus.annotation.TableId; | @@ -8,14 +8,13 @@ import com.baomidou.mybatisplus.annotation.TableId; | ||
| 8 | import com.baomidou.mybatisplus.annotation.TableName; | 8 | import com.baomidou.mybatisplus.annotation.TableName; |
| 9 | import lombok.*; | 9 | import lombok.*; |
| 10 | 10 | ||
| 11 | -// TODO @zyna:可以放到 contact 包下 | ||
| 12 | /** | 11 | /** |
| 13 | * CRM 联系人商机关联 DO | 12 | * CRM 联系人商机关联 DO |
| 14 | * | 13 | * |
| 15 | * @author 芋道源码 | 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 | @Data | 18 | @Data |
| 20 | @EqualsAndHashCode(callSuper = true) | 19 | @EqualsAndHashCode(callSuper = true) |
| 21 | @ToString(callSuper = true) | 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,8 +3,8 @@ package cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink; | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | 4 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| 5 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 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 | import org.apache.ibatis.annotations.Mapper; | 8 | import org.apache.ibatis.annotations.Mapper; |
| 9 | 9 | ||
| 10 | /** | 10 | /** |
| @@ -21,7 +21,7 @@ public interface CrmContactBusinessLinkMapper extends BaseMapperX<CrmContactBusi | @@ -21,7 +21,7 @@ public interface CrmContactBusinessLinkMapper extends BaseMapperX<CrmContactBusi | ||
| 21 | .eqIfPresent(CrmContactBusinessLinkDO::getBusinessId, reqVO.getBusinessId()) | 21 | .eqIfPresent(CrmContactBusinessLinkDO::getBusinessId, reqVO.getBusinessId()) |
| 22 | .betweenIfPresent(CrmContactBusinessLinkDO::getCreateTime, reqVO.getCreateTime()) | 22 | .betweenIfPresent(CrmContactBusinessLinkDO::getCreateTime, reqVO.getCreateTime()) |
| 23 | .orderByDesc(CrmContactBusinessLinkDO::getId)); | 23 | .orderByDesc(CrmContactBusinessLinkDO::getId)); |
| 24 | - } // TODO @zyna:方法和方法之间要有空行 | 24 | + } |
| 25 | default PageResult<CrmContactBusinessLinkDO> selectPageByContact(CrmContactBusinessLinkPageReqVO reqVO) { | 25 | default PageResult<CrmContactBusinessLinkDO> selectPageByContact(CrmContactBusinessLinkPageReqVO reqVO) { |
| 26 | return selectPage(reqVO, new LambdaQueryWrapperX<CrmContactBusinessLinkDO>() | 26 | return selectPage(reqVO, new LambdaQueryWrapperX<CrmContactBusinessLinkDO>() |
| 27 | .eqIfPresent(CrmContactBusinessLinkDO::getContactId, reqVO.getContactId()) | 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,6 +5,9 @@ import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusi | ||
| 5 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO; | 5 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO; |
| 6 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO; | 6 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO; |
| 7 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessUpdateReqVO; | 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 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | 11 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| 9 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | 12 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 10 | import jakarta.validation.Valid; | 13 | import jakarta.validation.Valid; |
| @@ -87,4 +90,10 @@ public interface CrmBusinessService { | @@ -87,4 +90,10 @@ public interface CrmBusinessService { | ||
| 87 | */ | 90 | */ |
| 88 | void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId); | 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,13 +7,21 @@ import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusi | ||
| 7 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO; | 7 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO; |
| 8 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO; | 8 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessTransferReqVO; |
| 9 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessUpdateReqVO; | 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 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; | 15 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; |
| 11 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | 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 | import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper; | 19 | import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper; |
| 13 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | 20 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 14 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | 21 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 15 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | 22 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; |
| 16 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; | 23 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 24 | +import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; | ||
| 17 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; | 25 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 18 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; | 26 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| 19 | import jakarta.annotation.Resource; | 27 | import jakarta.annotation.Resource; |
| @@ -23,6 +31,8 @@ import org.springframework.validation.annotation.Validated; | @@ -23,6 +31,8 @@ import org.springframework.validation.annotation.Validated; | ||
| 23 | 31 | ||
| 24 | import java.util.Collection; | 32 | import java.util.Collection; |
| 25 | import java.util.List; | 33 | import java.util.List; |
| 34 | +import java.util.Map; | ||
| 35 | +import java.util.Set; | ||
| 26 | 36 | ||
| 27 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 37 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 28 | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS; | 38 | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_NOT_EXISTS; |
| @@ -44,6 +54,9 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | @@ -44,6 +54,9 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | ||
| 44 | @Resource | 54 | @Resource |
| 45 | private CrmPermissionService crmPermissionService; | 55 | private CrmPermissionService crmPermissionService; |
| 46 | 56 | ||
| 57 | + @Resource | ||
| 58 | + private CrmContactService crmContactService; | ||
| 59 | + | ||
| 47 | @Override | 60 | @Override |
| 48 | @Transactional(rollbackFor = Exception.class) | 61 | @Transactional(rollbackFor = Exception.class) |
| 49 | public Long createBusiness(CrmBusinessCreateReqVO createReqVO, Long userId) { | 62 | public Long createBusiness(CrmBusinessCreateReqVO createReqVO, Long userId) { |
| @@ -130,5 +143,29 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | @@ -130,5 +143,29 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { | ||
| 130 | 143 | ||
| 131 | // 3. TODO 记录转移日志 | 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 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO; | 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 | import jakarta.validation.Valid; | 9 | import jakarta.validation.Valid; |
| 10 | import java.util.List; | 10 | import java.util.List; |
| @@ -41,9 +41,9 @@ public interface CrmContactBusinessLinkService { | @@ -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 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 6 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 5 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 7 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 6 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | 8 | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| 7 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessRespVO; | 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 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; | 12 | import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; |
| 11 | -import cn.iocoder.yudao.module.crm.convert.contactbusinessslink.CrmContactBusinessLinkConvert; | ||
| 12 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | 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 | import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessLinkMapper; | 16 | import cn.iocoder.yudao.module.crm.dal.mysql.contactbusinesslink.CrmContactBusinessLinkMapper; |
| 15 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | 17 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 16 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | 18 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 17 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | 19 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; |
| 20 | +import cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants; | ||
| 18 | import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; | 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 | import org.springframework.stereotype.Service; | 23 | import org.springframework.stereotype.Service; |
| 21 | import org.springframework.validation.annotation.Validated; | 24 | import org.springframework.validation.annotation.Validated; |
| 22 | 25 | ||
| 26 | +import javax.annotation.Resource; | ||
| 27 | +import java.util.ArrayList; | ||
| 23 | import java.util.List; | 28 | import java.util.List; |
| 24 | 29 | ||
| 25 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 30 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 26 | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | 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 | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTACT_BUSINESS_LINK_NOT_EXISTS; | 33 | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTACT_BUSINESS_LINK_NOT_EXISTS; |
| 28 | 34 | ||
| 29 | // TODO @puhui999:数据权限的校验;每个操作; | 35 | // TODO @puhui999:数据权限的校验;每个操作; |
| @@ -41,6 +47,9 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink | @@ -41,6 +47,9 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink | ||
| 41 | @Resource | 47 | @Resource |
| 42 | private CrmBusinessService crmBusinessService; | 48 | private CrmBusinessService crmBusinessService; |
| 43 | 49 | ||
| 50 | + @Resource | ||
| 51 | + private CrmContactService crmContactService; | ||
| 52 | + | ||
| 44 | @Override | 53 | @Override |
| 45 | public Long createContactBusinessLink(CrmContactBusinessLinkSaveReqVO createReqVO) { | 54 | public Long createContactBusinessLink(CrmContactBusinessLinkSaveReqVO createReqVO) { |
| 46 | CrmContactBusinessLinkDO contactBusinessLink = BeanUtils.toBean(createReqVO, CrmContactBusinessLinkDO.class); | 55 | CrmContactBusinessLinkDO contactBusinessLink = BeanUtils.toBean(createReqVO, CrmContactBusinessLinkDO.class); |
| @@ -51,14 +60,26 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink | @@ -51,14 +60,26 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink | ||
| 51 | @Override | 60 | @Override |
| 52 | public void createContactBusinessLinkBatch(List<CrmContactBusinessLinkSaveReqVO> createReqVOList) { | 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 | contactBusinessLinkMapper.insertBatch(saveDoList); | 79 | contactBusinessLinkMapper.insertBatch(saveDoList); |
| 58 | } | 80 | } |
| 59 | 81 | ||
| 60 | @Override | 82 | @Override |
| 61 | - @CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.WRITE) | ||
| 62 | public void updateContactBusinessLink(CrmContactBusinessLinkSaveReqVO updateReqVO) { | 83 | public void updateContactBusinessLink(CrmContactBusinessLinkSaveReqVO updateReqVO) { |
| 63 | // 校验存在 | 84 | // 校验存在 |
| 64 | validateContactBusinessLinkExists(updateReqVO.getId()); | 85 | validateContactBusinessLinkExists(updateReqVO.getId()); |
| @@ -68,14 +89,9 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink | @@ -68,14 +89,9 @@ public class CrmContactBusinessLinkServiceImpl implements CrmContactBusinessLink | ||
| 68 | } | 89 | } |
| 69 | 90 | ||
| 70 | @Override | 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 | private void validateContactBusinessLinkExists(Long id) { | 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 | package cn.iocoder.yudao.module.crm.service.contact; | 1 | package cn.iocoder.yudao.module.crm.service.contact; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactBusinessLinkPageReqVO; | ||
| 4 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactCreateReqVO; | 5 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactCreateReqVO; |
| 5 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO; | 6 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO; |
| 6 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactTransferReqVO; | 7 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactTransferReqVO; |
| 7 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactUpdateReqVO; | 8 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactUpdateReqVO; |
| 9 | +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessLinkDO; | ||
| 8 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; | 10 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; |
| 9 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | 11 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 10 | import jakarta.validation.Valid; | 12 | import jakarta.validation.Valid; |
| @@ -88,4 +90,12 @@ public interface CrmContactService { | @@ -88,4 +90,12 @@ public interface CrmContactService { | ||
| 88 | */ | 90 | */ |
| 89 | void transferContact(CrmContactTransferReqVO reqVO, Long userId); | 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,8 +5,17 @@ import cn.hutool.core.collection.ListUtil; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; | 6 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; |
| 7 | import cn.iocoder.yudao.module.crm.convert.contact.CrmContactConvert; | 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 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; | 15 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; |
| 9 | import cn.iocoder.yudao.module.crm.dal.mysql.contact.CrmContactMapper; | 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 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | 19 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 11 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | 20 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 12 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; | 21 | import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; |
| @@ -43,10 +52,12 @@ public class CrmContactServiceImpl implements CrmContactService { | @@ -43,10 +52,12 @@ public class CrmContactServiceImpl implements CrmContactService { | ||
| 43 | private CrmCustomerService customerService; | 52 | private CrmCustomerService customerService; |
| 44 | @Resource | 53 | @Resource |
| 45 | private CrmPermissionService crmPermissionService; | 54 | private CrmPermissionService crmPermissionService; |
| 46 | - | ||
| 47 | @Resource | 55 | @Resource |
| 48 | private AdminUserApi adminUserApi; | 56 | private AdminUserApi adminUserApi; |
| 49 | 57 | ||
| 58 | + @Resource | ||
| 59 | + private CrmContactBusinessLinkMapper contactBusinessLinkMapper; | ||
| 60 | + | ||
| 50 | @Override | 61 | @Override |
| 51 | @Transactional(rollbackFor = Exception.class) | 62 | @Transactional(rollbackFor = Exception.class) |
| 52 | public Long createContact(CrmContactCreateReqVO createReqVO, Long userId) { | 63 | public Long createContact(CrmContactCreateReqVO createReqVO, Long userId) { |
| @@ -150,4 +161,11 @@ public class CrmContactServiceImpl implements CrmContactService { | @@ -150,4 +161,11 @@ public class CrmContactServiceImpl implements CrmContactService { | ||
| 150 | // 3. TODO 记录转移日志 | 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 | } |