Browse Source

产品库

24282 2 years ago
parent
commit
62bf4eb979

+ 5 - 0
admin/src/main/java/com/fjhx/admin/entity/product/dto/ProductInfoDto.java

@@ -1,9 +1,12 @@
 package com.fjhx.admin.entity.product.dto;
 
 import com.fjhx.admin.entity.product.po.ProductInfo;
+import com.fjhx.file.entity.ObsFile;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * 产品库新增编辑入参实体
  *
@@ -14,4 +17,6 @@ import lombok.Setter;
 @Setter
 public class ProductInfoDto extends ProductInfo {
 
+    private List<ObsFile> fileList;
+
 }

+ 10 - 0
admin/src/main/java/com/fjhx/admin/entity/product/dto/ProductInfoSelectDto.java

@@ -14,4 +14,14 @@ import lombok.Setter;
 @Setter
 public class ProductInfoSelectDto extends BaseSelectDto {
 
+    /**
+     * 产品类型
+     */
+    private Integer type;
+
+    /**
+     * 产品分类id
+     */
+    private Long productClassifyId;
+
 }

+ 6 - 2
admin/src/main/java/com/fjhx/admin/entity/product/po/ProductInfo.java

@@ -1,8 +1,7 @@
 package com.fjhx.admin.entity.product.po;
 
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -30,6 +29,11 @@ public class ProductInfo extends BasePo {
     private String code;
 
     /**
+     * 自定义编码
+     */
+    private String customCode;
+
+    /**
      * 产品类型
      */
     private Integer type;

+ 25 - 0
admin/src/main/java/com/fjhx/admin/service/product/impl/ProductInfoServiceImpl.java

@@ -9,8 +9,12 @@ import com.fjhx.admin.entity.product.po.ProductInfo;
 import com.fjhx.admin.entity.product.vo.ProductInfoVo;
 import com.fjhx.admin.mapper.product.ProductInfoMapper;
 import com.fjhx.admin.service.product.ProductInfoService;
+import com.fjhx.admin.utils.CodeEnum;
+import com.fjhx.file.util.ObsFileUtil;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.common.utils.wrapper.SqlField;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
 /**
@@ -27,6 +31,13 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
     public Page<ProductInfoVo> getPage(ProductInfoSelectDto dto) {
         IWrapper<ProductInfo> wrapper = getWrapper();
         wrapper.orderByDesc("pi", ProductInfo::getId);
+        wrapper.eq("pi", ProductInfo::getType, dto.getType());
+        wrapper.eq("pi", ProductInfo::getProductClassifyId, dto.getProductClassifyId());
+        wrapper.keyword(dto,
+                new SqlField("pi", ProductInfo::getName),
+                new SqlField("pi", ProductInfo::getCode),
+                new SqlField("pi", ProductInfo::getCustomCode)
+        );
         Page<ProductInfoVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         return page;
     }
@@ -37,16 +48,30 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         return result;
     }
 
+    @Transactional
     public void add(ProductInfoDto productInfoDto) {
+        // 赋值产品编号
+        productInfoDto.setCode(CodeEnum.PRODUCT.getCode());
+        // 排除名称重复
+        this.nameDuplication(ProductInfo::getName, productInfoDto.getName(), "产品名称重复");
         this.save(productInfoDto);
+        ObsFileUtil.saveFile(productInfoDto.getFileList(), productInfoDto.getId());
     }
 
+    @Transactional
     public void edit(ProductInfoDto productInfoDto) {
+        // 禁止产品编号修改
+        productInfoDto.setCode(null);
+        // 排除名称重复
+        this.nameDuplication(ProductInfo::getName, productInfoDto.getName(), productInfoDto.getId(), "产品名称重复");
         this.updateById(productInfoDto);
+        ObsFileUtil.editFile(productInfoDto.getFileList(), productInfoDto.getId());
     }
 
+    @Transactional
     public void delete(Long id) {
         this.removeById(id);
+        ObsFileUtil.removeFile(id);
     }
 
 }

+ 100 - 0
admin/src/main/java/com/fjhx/admin/utils/CodeEnum.java

@@ -0,0 +1,100 @@
+package com.fjhx.admin.utils;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fjhx.admin.service.product.ProductInfoService;
+import com.ruoyi.common.exception.ServiceException;
+import lombok.Getter;
+
+import java.util.Date;
+import java.util.Map;
+
+@Getter
+public enum CodeEnum {
+
+    // 产品编码
+    PRODUCT("P", null, "code", 5, ProductInfoService.class),
+
+    ;
+
+    CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {
+        this.prefix = prefix;
+        this.dateFormat = dateFormat;
+        this.length = length;
+        this.codeFieldName = codeFieldName;
+        this.service = SpringUtil.getBean(serviceCls);
+    }
+
+    // 编码前缀
+    private final String prefix;
+    // 编码加日期规则
+    private final String dateFormat;
+    // 长度
+    private final Integer length;
+    // 编码字段名
+    private final String codeFieldName;
+    // service
+    private final IService<?> service;
+
+    /**
+     * 获取键值对
+     */
+    public String getCode() {
+        String itemPrefix;
+
+        if (ObjectUtil.isNotEmpty(dateFormat)) {
+            Date date = new Date();
+            String format = DateUtil.format(date, dateFormat);
+            itemPrefix = prefix + format;
+        } else {
+            itemPrefix = prefix;
+        }
+
+        Object obj = service.query()
+                .likeRight(codeFieldName, itemPrefix)
+                .orderByDesc(codeFieldName)
+                .last("limit 1")
+                .one();
+
+        if (obj == null) {
+            return itemPrefix + autoGenericCode(length, 0);
+        }
+
+        Map<String, Object> map = Convert.toMap(String.class, Object.class, obj);
+
+        String code = Convert.toStr(map.get(CharSequenceUtil.toCamelCase(codeFieldName)));
+        Integer codeNum = Convert.toInt(code.substring(itemPrefix.length()));
+        if (codeNum == null) {
+            throw new ServiceException("自定义编码与系统编码生成规则冲突,暂时无法生成编码,请联系管理员");
+        }
+
+        return itemPrefix + autoGenericCode(length, codeNum);
+    }
+
+    /**
+     * 获取键值对
+     */
+    public String getCode(String code) {
+        if (ObjectUtil.isNotEmpty(code)) {
+            Long count = service.query().eq(codeFieldName, code).count();
+            if (count != 0) {
+                throw new ServiceException("编码已存在");
+            }
+            return code;
+        } else {
+            return getCode();
+        }
+    }
+
+    /**
+     * 不够位数的在前面补0,保留num的长度位数字
+     */
+    private static String autoGenericCode(int length, Integer codeNum) {
+        return String.format("%0" + length + "d", codeNum + 1);
+    }
+
+}