feat:添加产品相关字段

main
HuangHuiKang 1 week ago
parent 36fdf46263
commit 3f0b8e3d31

@ -93,6 +93,27 @@ public class ErpProductRespVO extends ErpProductDO {
@ExcelProperty("预警库存")
private BigDecimal safetyNumber;
@Schema(description = "默认仓库 ID", example = "1")
private Long defaultWarehouseId;
@Schema(description = "默认仓库名称", example = "成品仓")
private String defaultWarehouseName;
@Schema(description = "是否易损件", example = "1")
private Integer fragileFlag;
@Schema(description = "采购周期(天)", example = "30")
private Integer purchaseCycle;
@Schema(description = "备件等级", example = "A")
private String sparePartLevel;
@Schema(description = "品牌", example = "SKF")
private String brand;
@Schema(description = "型号", example = "6205-2RS")
private String model;
@Schema(description = "二维码地址", example = "")
private String qrcodeUrl;
//
@ -116,4 +137,10 @@ public class ErpProductRespVO extends ErpProductDO {
@Schema(description = "默认包装方案 ID", example = "1")
private Long defaultPackagingSchemeId;
@Schema(description = "供应商列表")
private List<ProductSupplierRespVO> suppliers;
@Schema(description = "默认供应商 ID", example = "1")
private Long defaultSupplierId;
}

@ -64,6 +64,24 @@ public class ProductSaveReqVO {
@Schema(description = "预警库存", example = "161.87")
private BigDecimal safetyNumber;
@Schema(description = "默认仓库 ID", example = "1")
private Long defaultWarehouseId;
@Schema(description = "是否易损件", example = "1")
private Integer fragileFlag;
@Schema(description = "采购周期(天)", example = "30")
private Integer purchaseCycle;
@Schema(description = "备件等级", example = "A")
private String sparePartLevel;
@Schema(description = "品牌", example = "SKF")
private String brand;
@Schema(description = "型号", example = "6205-2RS")
private String model;
@Schema(description = "关联设备ID列表", example = "[11,15,23]")
private List<Long> deviceIds;
@ -76,4 +94,11 @@ public class ProductSaveReqVO {
@Schema(description = "默认包装方案 ID", example = "1")
private Long defaultPackagingSchemeId;
@Schema(description = "供应商列表")
@Valid
private List<ProductSupplierSaveReqVO> suppliers;
@Schema(description = "默认供应商 ID", example = "1")
private Long defaultSupplierId;
}

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.erp.controller.admin.product.vo.product;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 产品关联供应商 Response VO")
@Data
public class ProductSupplierRespVO {
@Schema(description = "关联记录 ID", example = "1")
private Long id;
@Schema(description = "供应商 ID", example = "1")
private Long supplierId;
@Schema(description = "供应商名称", example = "默认供应商")
private String supplierName;
@Schema(description = "是否默认供应商", example = "1")
private Integer defaultStatus;
}

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.erp.controller.admin.product.vo.product;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 产品关联供应商 Request VO")
@Data
public class ProductSupplierSaveReqVO {
@Schema(description = "供应商 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "供应商 ID 不能为空")
private Long supplierId;
@Schema(description = "是否默认供应商", example = "1")
private Integer defaultStatus;
}

@ -105,9 +105,44 @@ public class ErpProductDO extends BaseDO {
*/
private BigDecimal safetyNumber;
/**
*
*/
private Long defaultWarehouseId;
/**
*
*/
private String defaultWarehouseName;
/**
*
*/
private Integer fragileFlag;
/**
*
*/
private Integer purchaseCycle;
/**
*
*/
private String sparePartLevel;
/**
*
*/
private String brand;
/**
*
*/
private String model;
/**
*
*/
@TableField(exist = false)
private String qrcodeUrl;
}
}

@ -0,0 +1,39 @@
package cn.iocoder.yudao.module.erp.dal.dataobject.productsupplierrel;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
@TableName("erp_product_supplier_rel")
@KeySequence("erp_product_supplier_rel_seq")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductSupplierRelDO extends BaseDO {
@TableId
private Long id;
private Long productId;
private Long supplierId;
private String supplierName;
private Integer defaultStatus;
private Integer sort;
private String remark;
}

@ -0,0 +1,16 @@
package cn.iocoder.yudao.module.erp.dal.mysql.productsupplierrel;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.productsupplierrel.ProductSupplierRelDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ProductSupplierRelMapper extends BaseMapperX<ProductSupplierRelDO> {
default List<ProductSupplierRelDO> selectListByProductId(Long productId) {
return selectList(ProductSupplierRelDO::getProductId, productId);
}
}

@ -22,13 +22,19 @@ import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.productdevicerel.ProductDeviceRelDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.productpackagingschemerel.ProductPackagingSchemeRelDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.productmoldrel.ProductMoldRelDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.productsupplierrel.ProductSupplierRelDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpSupplierDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpWarehouseDO;
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductCategoryMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.productdevicerel.ProductDeviceRelMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.productpackagingschemerel.ProductPackagingSchemeRelMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.productmoldrel.ProductMoldRelMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.productsupplierrel.ProductSupplierRelMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockMapper;
import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService;
import cn.iocoder.yudao.module.erp.service.stock.ErpWarehouseService;
import cn.iocoder.yudao.module.erp.service.stock.ErpStockService;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -88,6 +94,9 @@ public class ErpProductServiceImpl implements ErpProductService {
@Resource
private ProductPackagingSchemeRelMapper productPackagingSchemeRelMapper;
@Resource
private ProductSupplierRelMapper productSupplierRelMapper;
@Resource
@Lazy // 延迟注入
@ -96,6 +105,12 @@ public class ErpProductServiceImpl implements ErpProductService {
@Resource
private ErpPackagingSchemeService packagingSchemeService;
@Resource
private ErpWarehouseService warehouseService;
@Resource
private ErpSupplierService supplierService;
@Resource
private QrcodeRecordService qrcodeService;
@ -152,6 +167,8 @@ public class ErpProductServiceImpl implements ErpProductService {
product.setBarCode(code);
}
fillDefaultWarehouse(product, createReqVO.getDefaultWarehouseId());
productMapper.insert(product);
@ -190,6 +207,7 @@ public class ErpProductServiceImpl implements ErpProductService {
}
saveProductPackagingSchemes(product.getId(), createReqVO.getPackagingSchemes(), createReqVO.getDefaultPackagingSchemeId());
saveProductSuppliers(product.getId(), createReqVO.getSuppliers(), createReqVO.getDefaultSupplierId());
// 生成二维码
CodeTypeEnum codeType = autoCodeUtil.queryCodeType("PRODUCT_CODE_GENERATE");
@ -229,6 +247,7 @@ public class ErpProductServiceImpl implements ErpProductService {
updateObj.setCategoryId(id);
id = productCategory.getParentId();
}
fillDefaultWarehouse(updateObj, updateReqVO.getDefaultWarehouseId());
productMapper.updateById(updateObj);
// 先删除旧关联(推荐逻辑删;如果你们没做逻辑删,也可以物理删)
@ -277,6 +296,10 @@ public class ErpProductServiceImpl implements ErpProductService {
.eq(ProductPackagingSchemeRelDO::getProductId, updateObj.getId()));
saveProductPackagingSchemes(updateObj.getId(), updateReqVO.getPackagingSchemes(), updateReqVO.getDefaultPackagingSchemeId());
productSupplierRelMapper.delete(Wrappers.<ProductSupplierRelDO>lambdaQuery()
.eq(ProductSupplierRelDO::getProductId, updateObj.getId()));
saveProductSuppliers(updateObj.getId(), updateReqVO.getSuppliers(), updateReqVO.getDefaultSupplierId());
}
@Override
@ -342,6 +365,10 @@ public class ErpProductServiceImpl implements ErpProductService {
respVO.setPackagingSchemes(BeanUtils.toBean(packagingSchemeRels, ProductPackagingSchemeRespVO.class));
packagingSchemeRels.stream().filter(item -> Integer.valueOf(1).equals(item.getDefaultStatus())).findFirst()
.ifPresent(item -> respVO.setDefaultPackagingSchemeId(item.getPackagingSchemeId()));
List<ProductSupplierRelDO> supplierRels = productSupplierRelMapper.selectListByProductId(id);
respVO.setSuppliers(BeanUtils.toBean(supplierRels, ProductSupplierRespVO.class));
supplierRels.stream().filter(item -> Integer.valueOf(1).equals(item.getDefaultStatus())).findFirst()
.ifPresent(item -> respVO.setDefaultSupplierId(item.getSupplierId()));
if (erpProductCategoryDO !=null ){
respVO.setCategoryType(erpProductCategoryDO.getType());
}
@ -383,6 +410,43 @@ public class ErpProductServiceImpl implements ErpProductService {
productPackagingSchemeRelMapper.insertBatch(relList);
}
private void fillDefaultWarehouse(ErpProductDO product, Long defaultWarehouseId) {
if (defaultWarehouseId == null) {
product.setDefaultWarehouseId(null);
product.setDefaultWarehouseName(null);
return;
}
ErpWarehouseDO warehouse = warehouseService.getWarehouse(defaultWarehouseId);
if (warehouse == null) {
throw exception(WAREHOUSE_NOT_EXISTS);
}
product.setDefaultWarehouseId(warehouse.getId());
product.setDefaultWarehouseName(warehouse.getName());
}
private void saveProductSuppliers(Long productId, List<ProductSupplierSaveReqVO> suppliers, Long defaultSupplierId) {
if (CollUtil.isEmpty(suppliers)) {
return;
}
List<Long> supplierIds = suppliers.stream().map(ProductSupplierSaveReqVO::getSupplierId)
.distinct().collect(Collectors.toList());
if (defaultSupplierId != null && !supplierIds.contains(defaultSupplierId)) {
throw exception(SUPPLIER_NOT_EXISTS);
}
List<ErpSupplierDO> supplierList = supplierService.validSupplierList(supplierIds);
Map<Long, ErpSupplierDO> supplierMap = convertMap(supplierList, ErpSupplierDO::getId);
List<ProductSupplierRelDO> relList = supplierIds.stream().map(supplierId -> {
ErpSupplierDO supplier = supplierMap.get(supplierId);
ProductSupplierRelDO rel = new ProductSupplierRelDO();
rel.setProductId(productId);
rel.setSupplierId(supplierId);
rel.setSupplierName(supplier.getName());
rel.setDefaultStatus(defaultSupplierId != null && defaultSupplierId.equals(supplierId) ? 1 : 0);
return rel;
}).collect(Collectors.toList());
productSupplierRelMapper.insertBatch(relList);
}
@Override
public ErpProductRespVO getProduct(Long id, String code) {
if (id != null) {

@ -66,6 +66,8 @@ public interface ErpSupplierService {
*/
List<ErpSupplierDO> getSupplierList(Collection<Long> ids);
List<ErpSupplierDO> validSupplierList(Collection<Long> ids);
/**
* Map
*
@ -93,4 +95,4 @@ public interface ErpSupplierService {
*/
List<ErpSupplierDO> getSupplierListByStatus(Integer status);
}
}

@ -12,9 +12,12 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.SUPPLIER_NOT_ENABLE;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.SUPPLIER_NOT_EXISTS;
@ -82,6 +85,25 @@ public class ErpSupplierServiceImpl implements ErpSupplierService {
return supplierMapper.selectBatchIds(ids);
}
@Override
public List<ErpSupplierDO> validSupplierList(Collection<Long> ids) {
if (ids == null || ids.isEmpty()) {
return Collections.emptyList();
}
List<ErpSupplierDO> list = supplierMapper.selectBatchIds(ids);
Map<Long, ErpSupplierDO> supplierMap = convertMap(list, ErpSupplierDO::getId);
for (Long id : ids) {
ErpSupplierDO supplier = supplierMap.get(id);
if (supplier == null) {
throw exception(SUPPLIER_NOT_EXISTS);
}
if (CommonStatusEnum.isDisable(supplier.getStatus())) {
throw exception(SUPPLIER_NOT_ENABLE, supplier.getName());
}
}
return list;
}
@Override
public PageResult<ErpSupplierDO> getSupplierPage(ErpSupplierPageReqVO pageReqVO) {
return supplierMapper.selectPage(pageReqVO);
@ -92,4 +114,4 @@ public class ErpSupplierServiceImpl implements ErpSupplierService {
return supplierMapper.selectListByStatus(status);
}
}
}

Loading…
Cancel
Save