Răsfoiți Sursa

产品重复规则 修改为【产品名称】和【规格型号】不能同时重复,但可以单项重复。

yzc 2 ani în urmă
părinte
comite
42d7ea60f6

+ 20 - 6
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -292,19 +292,26 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
     public void add(ProductInfoDto productInfoDto) {
         // 赋值产品编号
         productInfoDto.setCode(CodeEnum.PRODUCT.getCode());
-        // 排除名称重复
-        this.nameDuplication(ProductInfo::getName, productInfoDto.getName(), "产品名称重复");
+        //检查【产品名称】和【规格型号】不能同时重复,但可以单项重复。
+        long nameAndSpecCount = this.count(q -> q
+                .eq(ProductInfo::getName, productInfoDto.getName())
+                .eq(ProductInfo::getSpec, productInfoDto.getSpec())
+        );
+        if (nameAndSpecCount != 0) {
+            throw new ServiceException("同名称同规格的产品已存在");
+        }
         // 排除不为空的自定义编码重复
-        long count = this.count(q -> q.eq(ProductInfo::getCustomCode, productInfoDto.getCustomCode()).ne(ProductInfo::getCustomCode,""));
+        long count = this.count(q -> q.eq(ProductInfo::getCustomCode, productInfoDto.getCustomCode()).ne(ProductInfo::getCustomCode, ""));
         if (count != 0) {
             throw new ServiceException("产品自定义编码重复");
         }
         // 排除不为空的条码编号重复
-        long count1 = this.count(q -> q.eq(ProductInfo::getBarCode, productInfoDto.getBarCode()).ne(ProductInfo::getBarCode,""));
+        long count1 = this.count(q -> q.eq(ProductInfo::getBarCode, productInfoDto.getBarCode()).ne(ProductInfo::getBarCode, ""));
         if (count1 != 0) {
             throw new ServiceException("产品条码编码重复");
         }
 
+
         this.save(productInfoDto);
         ObsFileUtil.saveFile(productInfoDto.getFileList(), productInfoDto.getId());
     }
@@ -457,8 +464,15 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
     public void edit(ProductInfoDto productInfoDto) {
         // 禁止产品编号修改
         productInfoDto.setCode(null);
-        // 排除名称重复
-        this.nameDuplication(ProductInfo::getName, productInfoDto.getName(), productInfoDto.getId(), "产品名称重复");
+        //检查【产品名称】和【规格型号】不能同时重复,但可以单项重复。
+        long nameAndSpecCount = this.count(q -> q
+                .ne(ProductInfo::getId, productInfoDto.getId())
+                .eq(ProductInfo::getName, productInfoDto.getName())
+                .eq(ProductInfo::getSpec, productInfoDto.getSpec())
+        );
+        if (nameAndSpecCount != 0) {
+            throw new ServiceException("同名称同规格的产品已存在");
+        }
         // 排除不为空的自定义编码重复
         long count = this.count(q -> q
                 .ne(ProductInfo::getId, productInfoDto.getId())