| | |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.collection.ListUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessProductDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactBusinessDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; |
| | | import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper; |
| | | import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessProductMapper; |
| | | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| | |
| | | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| | | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| | | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; |
| | | import cn.iocoder.yudao.module.crm.service.product.CrmProductService; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import com.mzt.logapi.context.LogRecordContext; |
| | | import com.mzt.logapi.service.impl.DiffParseFunction; |
| | |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| | |
| | | @Resource |
| | | private CrmContactBusinessService contactBusinessService; |
| | | @Resource |
| | | private CrmProductService productService; |
| | | private MdmItemApi mdmItemApi; |
| | | |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | |
| | | if (saveReqVO.getCustomerId() != null) { |
| | | customerService.validateCustomer(saveReqVO.getCustomerId()); |
| | | } |
| | | // 校验联系人 |
| | | // 校验联系人(且必须与商机属于同一客户,避免跨客户关联) |
| | | if (saveReqVO.getContactId() != null) { |
| | | contactService.validateContact(saveReqVO.getContactId()); |
| | | if (saveReqVO.getCustomerId() != null) { |
| | | CrmContactDO contact = contactService.getContact(saveReqVO.getContactId()); |
| | | if (ObjUtil.notEqual(saveReqVO.getCustomerId(), contact.getCustomerId())) { |
| | | throw exception(BUSINESS_CONTACT_CUSTOMER_NOT_MATCH); |
| | | } |
| | | } |
| | | } |
| | | // 校验负责人 |
| | | if (saveReqVO.getOwnerUserId() != null) { |
| | |
| | | } |
| | | |
| | | private List<CrmBusinessProductDO> validateBusinessProducts(List<CrmBusinessSaveReqVO.BusinessProduct> list) { |
| | | // 1. 校验产品存在 |
| | | productService.validProductList(convertSet(list, CrmBusinessSaveReqVO.BusinessProduct::getProductId)); |
| | | // 1. 校验物料存在 |
| | | Set<Long> itemIds = convertSet(list, CrmBusinessSaveReqVO.BusinessProduct::getItemId); |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(itemIds); |
| | | for (Long itemId : itemIds) { |
| | | if (itemMap.get(itemId) == null) { |
| | | throw exception(PRODUCT_NOT_EXISTS); |
| | | } |
| | | } |
| | | // 2. 转化为 CrmBusinessProductDO 列表 |
| | | return convertList(list, o -> BeanUtils.toBean(o, CrmBusinessProductDO.class, |
| | | item -> item.setTotalPrice(MoneyUtils.priceMultiply(item.getBusinessPrice(), item.getCount())))); |
| | |
| | | } |
| | | |
| | | @Override |
| | | @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#customerId", level = CrmPermissionLevelEnum.READ) |
| | | public List<CrmBusinessDO> getBusinessListByCustomerId(Long customerId) { |
| | | return businessMapper.selectListByCustomerId(customerId); |
| | | } |
| | | |
| | | @Override |
| | | @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACT, bizId = "#contactId", level = CrmPermissionLevelEnum.READ) |
| | | public List<CrmBusinessDO> getBusinessListByContact(Long contactId) { |
| | | // 1. 查询关联的商机编号 |
| | | List<CrmContactBusinessDO> contactBusinessList = contactBusinessService.getContactBusinessListByContactId(contactId); |
| | | if (CollUtil.isEmpty(contactBusinessList)) { |
| | | return ListUtil.empty(); |
| | | } |
| | | // 2. 查询商机列表 |
| | | return businessMapper.selectByIds(convertSet(contactBusinessList, CrmContactBusinessDO::getBusinessId)); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<CrmBusinessDO> getBusinessPageByDate(CrmStatisticsFunnelReqVO pageVO) { |
| | | return businessMapper.selectPage(pageVO); |
| | | } |