mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-02-08 14:44:57 +08:00
✨ CRM:完善商机的新增、修改逻辑
This commit is contained in:
parent
f76a7cd941
commit
77f98c4d12
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.crm.controller.admin.business;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
@ -29,6 +30,7 @@ import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
|
||||
@Tag(name = "管理后台 - CRM 商机状态")
|
||||
@RestController
|
||||
@ -62,7 +64,7 @@ public class CrmBusinessStatusController {
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除商机状态")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('crm:business-status-type:delete')")
|
||||
@PreAuthorize("@ss.hasPermission('crm:business-status:delete')")
|
||||
public CommonResult<Boolean> deleteBusinessStatusType(@RequestParam("id") Long id) {
|
||||
businessStatusTypeService.deleteBusinessStatusType(id);
|
||||
return success(true);
|
||||
@ -71,7 +73,7 @@ public class CrmBusinessStatusController {
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得商机状态")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('crm:business-status-type:query')")
|
||||
@PreAuthorize("@ss.hasPermission('crm:business-status:query')")
|
||||
public CommonResult<CrmBusinessStatusRespVO> getBusinessStatusType(@RequestParam("id") Long id) {
|
||||
CrmBusinessStatusTypeDO statusType = businessStatusTypeService.getBusinessStatusType(id);
|
||||
if (statusType == null) {
|
||||
@ -84,10 +86,13 @@ public class CrmBusinessStatusController {
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得商机状态分页")
|
||||
@PreAuthorize("@ss.hasPermission('crm:business-status-type:query')")
|
||||
public CommonResult<PageResult<CrmBusinessStatusRespVO>> getBusinessStatusTypePage(@Valid PageParam pageReqVO) {
|
||||
@PreAuthorize("@ss.hasPermission('crm:business-status:query')")
|
||||
public CommonResult<PageResult<CrmBusinessStatusRespVO>> getBusinessStatusPage(@Valid PageParam pageReqVO) {
|
||||
// 1. 查询数据
|
||||
PageResult<CrmBusinessStatusTypeDO> pageResult = businessStatusTypeService.getBusinessStatusTypePage(pageReqVO);
|
||||
if (CollUtil.isEmpty(pageResult.getList())) {
|
||||
return success(PageResult.empty(pageResult.getTotal()));
|
||||
}
|
||||
// 2. 拼接数据
|
||||
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
|
||||
convertSet(pageResult.getList(), statusType -> Long.parseLong(statusType.getCreator())));
|
||||
@ -101,9 +106,12 @@ public class CrmBusinessStatusController {
|
||||
}
|
||||
|
||||
@GetMapping("/type-simple-list")
|
||||
@Operation(summary = "获得商机状态列表")
|
||||
@Operation(summary = "获得商机状态组列表")
|
||||
public CommonResult<List<CrmBusinessStatusRespVO>> getBusinessStatusTypeSimpleList() {
|
||||
List<CrmBusinessStatusTypeDO> list = businessStatusTypeService.getBusinessStatusTypeList();
|
||||
// 过滤掉部门不匹配的
|
||||
Long deptId = adminUserApi.getUser(getLoginUserId()).getDeptId();
|
||||
list.removeIf(statusType -> CollUtil.isNotEmpty(statusType.getDeptIds()) && !statusType.getDeptIds().contains(deptId));
|
||||
return success(BeanUtils.toBean(list, CrmBusinessStatusRespVO.class));
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.iocoder.yudao.module.crm.controller.admin.business.vo.status;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
@ -24,6 +25,7 @@ public class CrmBusinessStatusSaveReqVO {
|
||||
|
||||
@Schema(description = "商机状态集合", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "商机状态集合不能为空")
|
||||
@Valid
|
||||
private List<Status> statuses;
|
||||
|
||||
@Data
|
||||
|
@ -19,11 +19,14 @@ import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
|
||||
import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
|
||||
import cn.iocoder.yudao.module.crm.service.business.bo.CrmBusinessUpdateProductReqBO;
|
||||
import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessService;
|
||||
import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
|
||||
import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
|
||||
import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
|
||||
import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO;
|
||||
import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
|
||||
import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
|
||||
import cn.iocoder.yudao.module.crm.service.product.CrmProductService;
|
||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import com.mzt.logapi.context.LogRecordContext;
|
||||
import com.mzt.logapi.service.impl.DiffParseFunction;
|
||||
import com.mzt.logapi.starter.annotation.LogRecord;
|
||||
@ -57,16 +60,26 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
|
||||
@Resource
|
||||
private CrmBusinessProductMapper businessProductMapper;
|
||||
|
||||
@Resource
|
||||
private CrmBusinessStatusService businessStatusService;
|
||||
@Resource
|
||||
@Lazy // 延迟加载,避免循环依赖
|
||||
private CrmContractService contractService;
|
||||
@Resource
|
||||
private CrmCustomerService customerService;
|
||||
@Resource
|
||||
@Lazy // 延迟加载,避免循环依赖
|
||||
private CrmContactService contactService;
|
||||
@Resource
|
||||
private CrmPermissionService permissionService;
|
||||
@Resource
|
||||
private CrmContactBusinessService contactBusinessService;
|
||||
@Resource
|
||||
private CrmProductService productService;
|
||||
|
||||
@Resource
|
||||
private AdminUserApi adminUserApi;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@LogRecord(type = CRM_BUSINESS_TYPE, subType = CRM_BUSINESS_CREATE_SUB_TYPE, bizNo = "{{#business.id}}",
|
||||
@ -74,10 +87,12 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
|
||||
public Long createBusiness(CrmBusinessSaveReqVO createReqVO, Long userId) {
|
||||
// 1.1 校验产品项的有效性
|
||||
List<CrmBusinessProductDO> businessProducts = validateBusinessProducts(createReqVO.getProducts());
|
||||
// 1.2 TODO 芋艿:校验关联字
|
||||
// 1.2 校验关联字段
|
||||
validateBusinessForCreate(createReqVO);
|
||||
|
||||
// 2.1 插入商机
|
||||
CrmBusinessDO business = BeanUtils.toBean(createReqVO, CrmBusinessDO.class).setOwnerUserId(userId);
|
||||
business.setStatusId(businessStatusService.getBusinessStatusListByTypeId(createReqVO.getStatusTypeId()).get(0).getId()); // 默认状态
|
||||
calculateTotalPrice(business, businessProducts);
|
||||
businessMapper.insert(business);
|
||||
// 2.2 插入商机关联商品
|
||||
@ -101,6 +116,9 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
|
||||
|
||||
// TODO @lzxhqs:CrmContactBusinessService 调用这个;这样逻辑才能收敛哈;
|
||||
private void createContactBusiness(Long businessId, Long contactId) {
|
||||
if (contactId == null) {
|
||||
return;
|
||||
}
|
||||
CrmContactBusinessDO contactBusiness = new CrmContactBusinessDO();
|
||||
contactBusiness.setBusinessId(businessId);
|
||||
contactBusiness.setContactId(contactId);
|
||||
@ -113,11 +131,13 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
|
||||
success = CRM_BUSINESS_UPDATE_SUCCESS)
|
||||
@CrmPermission(bizType = CrmBizTypeEnum.CRM_BUSINESS, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.WRITE)
|
||||
public void updateBusiness(CrmBusinessSaveReqVO updateReqVO) {
|
||||
updateReqVO.setOwnerUserId(null).setStatusTypeId(null); // 不允许更新的字段
|
||||
// 1.1 校验存在
|
||||
CrmBusinessDO oldBusiness = validateBusinessExists(updateReqVO.getId());
|
||||
// 1.2 校验产品项的有效性
|
||||
List<CrmBusinessProductDO> businessProducts = validateBusinessProducts(updateReqVO.getProducts());
|
||||
// 1.3 TODO 芋艿:校验关联字
|
||||
// 1.3 校验关联字段
|
||||
validateBusinessForCreate(updateReqVO);
|
||||
|
||||
// 2.1 更新商机
|
||||
CrmBusinessDO updateObj = BeanUtils.toBean(updateReqVO, CrmBusinessDO.class);
|
||||
@ -148,6 +168,25 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
|
||||
}
|
||||
}
|
||||
|
||||
private void validateBusinessForCreate(CrmBusinessSaveReqVO saveReqVO) {
|
||||
// 校验商机状态
|
||||
if (saveReqVO.getStatusTypeId() != null) {
|
||||
businessStatusService.validateBusinessStatusType(saveReqVO.getStatusTypeId());
|
||||
}
|
||||
// 校验客户
|
||||
if (saveReqVO.getCustomerId() != null) {
|
||||
customerService.validateCustomer(saveReqVO.getCustomerId());
|
||||
}
|
||||
// 校验联系人
|
||||
if (saveReqVO.getContactId() != null) {
|
||||
contactService.validateContact(saveReqVO.getContactId());
|
||||
}
|
||||
// 校验负责人
|
||||
if (saveReqVO.getOwnerUserId() != null) {
|
||||
adminUserApi.validateUser(saveReqVO.getOwnerUserId());
|
||||
}
|
||||
}
|
||||
|
||||
private List<CrmBusinessProductDO> validateBusinessProducts(List<CrmBusinessSaveReqVO.Product> list) {
|
||||
// 1. 校验产品存在
|
||||
productService.validProductList(convertSet(list, CrmBusinessSaveReqVO.Product::getProductId));
|
||||
|
@ -50,6 +50,13 @@ public interface CrmBusinessStatusService {
|
||||
*/
|
||||
CrmBusinessStatusTypeDO getBusinessStatusType(Long id);
|
||||
|
||||
/**
|
||||
* 校验商机状态组
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void validateBusinessStatusType(Long id);
|
||||
|
||||
/**
|
||||
* 获得商机状态组列表
|
||||
*
|
||||
|
@ -68,7 +68,7 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateBusinessStatus(CrmBusinessStatusSaveReqVO updateReqVO) {
|
||||
// 1.1 校验存在
|
||||
validateBusinessStatusTypeNameUnique(updateReqVO.getId());
|
||||
validateBusinessStatusTypeExists(updateReqVO.getId());
|
||||
// 1.2 校验名称是否存在
|
||||
validateBusinessStatusTypeNameUnique(updateReqVO.getName(), updateReqVO.getId());
|
||||
// 1.3 设置状态的排序
|
||||
@ -104,7 +104,7 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
|
||||
}
|
||||
}
|
||||
|
||||
private void validateBusinessStatusTypeNameUnique(Long id) {
|
||||
private void validateBusinessStatusTypeExists(Long id) {
|
||||
if (businessStatusTypeMapper.selectById(id) == null) {
|
||||
throw exception(BUSINESS_STATUS_TYPE_NOT_EXISTS);
|
||||
}
|
||||
@ -123,7 +123,7 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteBusinessStatusType(Long id) {
|
||||
// 1.1 校验存在
|
||||
validateBusinessStatusTypeNameUnique(id);
|
||||
validateBusinessStatusTypeExists(id);
|
||||
// 1.2 已经使用,无法更新
|
||||
if (businessService.getBusinessCountByStatusTypeId(id) > 0) {
|
||||
throw exception(BUSINESS_STATUS_DELETE_FAIL_USED);
|
||||
@ -140,6 +140,11 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
|
||||
return businessStatusTypeMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateBusinessStatusType(Long id) {
|
||||
validateBusinessStatusTypeExists(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CrmBusinessStatusTypeDO> getBusinessStatusTypeList() {
|
||||
return businessStatusTypeMapper.selectList();
|
||||
@ -147,7 +152,7 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService {
|
||||
|
||||
@Override
|
||||
public PageResult<CrmBusinessStatusTypeDO> getBusinessStatusTypePage(PageParam pageReqVO) {
|
||||
return null;
|
||||
return businessStatusTypeMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -87,6 +87,13 @@ public interface CrmContactService {
|
||||
*/
|
||||
CrmContactDO getContact(Long id);
|
||||
|
||||
/**
|
||||
* 校验联系人
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void validateContact(Long id);
|
||||
|
||||
/**
|
||||
* 获得联系人列表
|
||||
*
|
||||
|
@ -229,6 +229,11 @@ public class CrmContactServiceImpl implements CrmContactService {
|
||||
return contactMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validateContact(Long id) {
|
||||
validateContactExists(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<CrmContactDO> getContactListByIds(Collection<Long> ids, Long userId) {
|
||||
if (CollUtil.isEmpty(ids)) {
|
||||
|
Loading…
Reference in New Issue
Block a user