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