From 6b5f7c66fc40d7f6099d561e31a34fbd50dd20d3 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 01 七月 2026 15:54:57 +0800
Subject: [PATCH] 初始化项目
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java | 167 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 140 insertions(+), 27 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java
index e45c4db..04dc3f5 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java
@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.crm.service.product;
import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductPageReqVO;
@@ -14,6 +15,11 @@
import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemCreateReqDTO;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
+import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemUpdateReqDTO;
+import cn.iocoder.yudao.module.mdm.enums.MdmItemTypeEnum;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction;
@@ -23,10 +29,8 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
@@ -36,6 +40,11 @@
/**
* CRM 浜у搧 Service 瀹炵幇绫�
+ *
+ * 鏀归�犺鏄庯細浜у搧鏁版嵁缁熶竴浣跨敤 MDM 涓绘暟鎹鐞嗭紙itemType=2 浜у搧绫诲瀷锛�
+ * - 鍒涘缓銆佹洿鏂版搷浣滈�氳繃 MDM API 杩涜
+ * - 鏌ヨ鎿嶄綔浠� MDM 鑾峰彇鏁版嵁
+ * - CRM 浜у搧琛ㄤ繚鐣欑敤浜庢潈闄愮鐞�
*
* @author ZanGe涓�
*/
@@ -54,6 +63,9 @@
@Resource
private AdminUserApi adminUserApi;
+ @Resource
+ private MdmItemApi mdmItemApi;
+
@Override
@Transactional(rollbackFor = Exception.class)
@LogRecord(type = CRM_PRODUCT_TYPE, subType = CRM_PRODUCT_CREATE_SUB_TYPE, bizNo = "{{#productId}}",
@@ -64,16 +76,38 @@
validateProductNoDuplicate(null, createReqVO.getNo());
validateProductCategoryExists(createReqVO.getCategoryId());
- // 2. 鎻掑叆浜у搧
- CrmProductDO product = BeanUtils.toBean(createReqVO, CrmProductDO.class);
+ // 2. 閫氳繃 MDM API 鍒涘缓浜у搧
+ MdmItemCreateReqDTO createReqDTO = new MdmItemCreateReqDTO();
+ createReqDTO.setCode(createReqVO.getNo());
+ createReqDTO.setName(createReqVO.getName());
+ createReqDTO.setBarCode(createReqVO.getNo()); // 浣跨敤缂栫爜浣滀负鏉$爜
+ createReqDTO.setCategoryId(createReqVO.getCategoryId());
+ createReqDTO.setUnitMeasureId(createReqVO.getUnit() != null ? createReqVO.getUnit().longValue() : null);
+ createReqDTO.setItemType(MdmItemTypeEnum.PRODUCT.getType()); // 浜у搧绫诲瀷
+ createReqDTO.setStatus(createReqVO.getStatus() != null ? createReqVO.getStatus() : CommonStatusEnum.ENABLE.getStatus());
+ createReqDTO.setSalesPrice(createReqVO.getPrice());
+ createReqDTO.setRemark(createReqVO.getDescription());
+ Long itemId = mdmItemApi.createItem(createReqDTO).getCheckedData();
+
+ // 3. 鎻掑叆鏈湴浜у搧璁板綍锛堢敤浜庢潈闄愮鐞嗭級
+ CrmProductDO product = new CrmProductDO();
+ product.setId(itemId);
+ product.setName(createReqVO.getName());
+ product.setNo(createReqVO.getNo());
+ product.setUnit(createReqVO.getUnit());
+ product.setPrice(createReqVO.getPrice());
+ product.setStatus(createReqVO.getStatus());
+ product.setCategoryId(createReqVO.getCategoryId());
+ product.setDescription(createReqVO.getDescription());
+ product.setOwnerUserId(createReqVO.getOwnerUserId());
productMapper.insert(product);
- // 3. 鎻掑叆鏁版嵁鏉冮檺
+ // 4. 鎻掑叆鏁版嵁鏉冮檺
permissionService.createPermission(new CrmPermissionCreateReqBO().setUserId(product.getOwnerUserId())
.setBizType(CrmBizTypeEnum.CRM_PRODUCT.getType()).setBizId(product.getId())
.setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
- // 4. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
+ // 5. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
LogRecordContext.putVariable("productId", product.getId());
return product.getId();
}
@@ -89,26 +123,47 @@
validateProductNoDuplicate(updateReqVO.getId(), updateReqVO.getNo());
validateProductCategoryExists(updateReqVO.getCategoryId());
- // 2. 鏇存柊浜у搧
+ // 2. 閫氳繃 MDM API 鏇存柊浜у搧
+ MdmItemUpdateReqDTO updateReqDTO = new MdmItemUpdateReqDTO();
+ updateReqDTO.setId(updateReqVO.getId());
+ updateReqDTO.setCode(updateReqVO.getNo());
+ updateReqDTO.setName(updateReqVO.getName());
+ updateReqDTO.setBarCode(updateReqVO.getNo());
+ updateReqDTO.setCategoryId(updateReqVO.getCategoryId());
+ updateReqDTO.setUnitMeasureId(updateReqVO.getUnit() != null ? updateReqVO.getUnit().longValue() : null);
+ updateReqDTO.setItemType(MdmItemTypeEnum.PRODUCT.getType());
+ updateReqDTO.setStatus(updateReqVO.getStatus());
+ updateReqDTO.setSalesPrice(updateReqVO.getPrice());
+ updateReqDTO.setRemark(updateReqVO.getDescription());
+ mdmItemApi.updateItem(updateReqDTO);
+
+ // 3. 鏇存柊鏈湴浜у搧璁板綍
CrmProductDO updateObj = BeanUtils.toBean(updateReqVO, CrmProductDO.class);
productMapper.updateById(updateObj);
- // 3. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
+ // 4. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(crmProductDO, CrmProductSaveReqVO.class));
}
private CrmProductDO validateProductExists(Long id) {
+ // 浠� MDM 鏍¢獙
+ MdmItemRespDTO item = mdmItemApi.getItem(id).getCheckedData();
+ if (item == null) {
+ throw exception(PRODUCT_NOT_EXISTS);
+ }
+ // 浠庢湰鍦拌幏鍙� CRM 浜у搧璁板綍
CrmProductDO product = productMapper.selectById(id);
if (product == null) {
- throw exception(PRODUCT_NOT_EXISTS);
+ // 濡傛灉鏈湴涓嶅瓨鍦紝鍒涘缓涓�涓悓姝ヨ褰�
+ product = convertToCrmProduct(item);
+ productMapper.insert(product);
}
return product;
}
private void validateProductNoDuplicate(Long id, String no) {
- CrmProductDO product = productMapper.selectByNo(no);
- if (product == null
- || product.getId().equals(id)) {
+ MdmItemRespDTO item = mdmItemApi.getItemByCode(no).getCheckedData();
+ if (item == null || item.getId().equals(id)) {
return;
}
throw exception(PRODUCT_NO_EXISTS);
@@ -128,29 +183,65 @@
public void deleteProduct(Long id) {
// 鏍¢獙瀛樺湪
validateProductExists(id);
- // 鍒犻櫎
+ // 閫氳繃 MDM API 鍒犻櫎锛堟洿鏂扮姸鎬佷负绂佺敤锛�
+ mdmItemApi.updateItemStatus(id, CommonStatusEnum.DISABLE.getStatus());
+ // 鍒犻櫎鏈湴璁板綍
productMapper.deleteById(id);
}
@Override
@CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#id", level = CrmPermissionLevelEnum.READ)
public CrmProductDO getProduct(Long id) {
- return productMapper.selectById(id);
+ // 浠� MDM 鑾峰彇浜у搧鏁版嵁
+ MdmItemRespDTO item = mdmItemApi.getItem(id).getCheckedData();
+ if (item == null || !MdmItemTypeEnum.PRODUCT.getType().equals(item.getItemType())) {
+ return null;
+ }
+ // 鑾峰彇鏈湴 CRM 浜у搧璁板綍锛堢敤浜庢潈闄愶級
+ CrmProductDO product = productMapper.selectById(id);
+ if (product == null) {
+ // 鍚屾鍒涘缓鏈湴璁板綍
+ product = convertToCrmProduct(item);
+ productMapper.insert(product);
+ } else {
+ // 鏇存柊鏈湴璁板綍鐨勬暟鎹�
+ product.setName(item.getName());
+ product.setNo(item.getCode());
+ product.setPrice(item.getSalesPrice());
+ product.setStatus(item.getStatus());
+ product.setCategoryId(item.getCategoryId());
+ product.setDescription(item.getRemark());
+ }
+ return product;
}
@Override
public PageResult<CrmProductDO> getProductPage(CrmProductPageReqVO pageReqVO) {
- return productMapper.selectPage(pageReqVO);
+ // 浠� MDM 鑾峰彇浜у搧鍒嗛〉鏁版嵁
+ cn.iocoder.yudao.framework.common.pojo.PageResult<MdmItemRespDTO> mdmPageResult =
+ mdmItemApi.getItemPage(MdmItemTypeEnum.PRODUCT.getType(), null,
+ pageReqVO.getPageNo(), pageReqVO.getPageSize()).getCheckedData();
+ // 杞崲涓� CRM 浜у搧
+ List<CrmProductDO> list = mdmPageResult.getList().stream()
+ .map(this::convertToCrmProduct)
+ .collect(Collectors.toList());
+ return new PageResult<>(list, mdmPageResult.getTotal());
}
@Override
public Long getProductByCategoryId(Long categoryId) {
- return productMapper.selectCountByCategoryId(categoryId);
+ return mdmItemApi.getItemCountByCategoryId(categoryId).getCheckedData();
}
@Override
public List<CrmProductDO> getProductListByStatus(Integer status) {
- return productMapper.selectListByStatus(status);
+ // 浠� MDM 鑾峰彇浜у搧鏁版嵁
+ List<MdmItemRespDTO> items = mdmItemApi.getItemListByStatus(status).getCheckedData();
+ // 杩囨护浜у搧绫诲瀷骞惰浆鎹�
+ return items.stream()
+ .filter(item -> MdmItemTypeEnum.PRODUCT.getType().equals(item.getItemType()))
+ .map(this::convertToCrmProduct)
+ .collect(Collectors.toList());
}
@Override
@@ -158,18 +249,20 @@
if (CollUtil.isEmpty(ids)) {
return Collections.emptyList();
}
- List<CrmProductDO> list = productMapper.selectByIds(ids);
- Map<Long, CrmProductDO> productMap = convertMap(list, CrmProductDO::getId);
+ List<MdmItemRespDTO> items = mdmItemApi.getItemList(ids).getCheckedData();
+ Map<Long, MdmItemRespDTO> itemMap = convertMap(items, MdmItemRespDTO::getId);
+ List<CrmProductDO> result = new ArrayList<>();
for (Long id : ids) {
- CrmProductDO product = productMap.get(id);
- if (productMap.get(id) == null) {
+ MdmItemRespDTO item = itemMap.get(id);
+ if (item == null) {
throw exception(PRODUCT_NOT_EXISTS);
}
- if (CrmProductStatusEnum.isDisable(product.getStatus())) {
- throw exception(PRODUCT_NOT_ENABLE, product.getName());
+ if (CrmProductStatusEnum.isDisable(item.getStatus())) {
+ throw exception(PRODUCT_NOT_ENABLE, item.getName());
}
+ result.add(convertToCrmProduct(item));
}
- return list;
+ return result;
}
@Override
@@ -177,7 +270,27 @@
if (CollUtil.isEmpty(ids)) {
return Collections.emptyList();
}
- return productMapper.selectByIds(ids);
+ List<MdmItemRespDTO> items = mdmItemApi.getItemList(ids).getCheckedData();
+ return items.stream()
+ .filter(item -> MdmItemTypeEnum.PRODUCT.getType().equals(item.getItemType()))
+ .map(this::convertToCrmProduct)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 灏� MDM 鐗╂枡杞崲涓� CRM 浜у搧
+ */
+ private CrmProductDO convertToCrmProduct(MdmItemRespDTO item) {
+ CrmProductDO product = new CrmProductDO();
+ product.setId(item.getId());
+ product.setName(item.getName());
+ product.setNo(item.getCode());
+ product.setUnit(item.getUnitMeasureId() != null ? item.getUnitMeasureId().intValue() : null);
+ product.setPrice(item.getSalesPrice());
+ product.setStatus(item.getStatus());
+ product.setCategoryId(item.getCategoryId());
+ product.setDescription(item.getRemark());
+ return product;
}
}
--
Gitblit v1.9.3