package cn.iocoder.yudao.module.product.service.property; import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertyPageReqVO; import cn.iocoder.yudao.module.product.controller.admin.property.vo.property.ProductPropertySaveReqVO; import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO; import cn.iocoder.yudao.module.product.dal.mysql.property.ProductPropertyMapper; import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.Collection; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*; /** * 商品属性项 Service 实现类 * * @author 芋道源码 */ @Service @Validated public class ProductPropertyServiceImpl implements ProductPropertyService { @Resource private ProductPropertyMapper productPropertyMapper; @Resource @Lazy // 延迟加载,解决循环依赖问题 private ProductPropertyValueService productPropertyValueService; @Resource private ProductSkuService productSkuService; @Override @Transactional(rollbackFor = Exception.class) public Long createProperty(ProductPropertySaveReqVO createReqVO) { // 如果已经添加过该属性项,直接返回 ProductPropertyDO dbProperty = productPropertyMapper.selectByName(createReqVO.getName()); if (dbProperty != null) { return dbProperty.getId(); } // 插入 ProductPropertyDO property = BeanUtils.toBean(createReqVO, ProductPropertyDO.class); productPropertyMapper.insert(property); // 返回 return property.getId(); } @Override @Transactional(rollbackFor = Exception.class) public void updateProperty(ProductPropertySaveReqVO updateReqVO) { validatePropertyExists(updateReqVO.getId()); // 校验名字重复 ProductPropertyDO property = productPropertyMapper.selectByName(updateReqVO.getName()); if (property != null && ObjUtil.notEqual(property.getId(), updateReqVO.getId())) { throw exception(PROPERTY_EXISTS); } // 更新 ProductPropertyDO updateObj = BeanUtils.toBean(updateReqVO, ProductPropertyDO.class); productPropertyMapper.updateById(updateObj); // 更新 sku 相关属性 productSkuService.updateSkuProperty(updateObj.getId(), updateObj.getName()); } @Override public void deleteProperty(Long id) { // 校验存在 validatePropertyExists(id); // 校验其下是否有规格值 if (productPropertyValueService.getPropertyValueCountByPropertyId(id) > 0) { throw exception(PROPERTY_DELETE_FAIL_VALUE_EXISTS); } // 删除 productPropertyMapper.deleteById(id); // 同步删除属性值 productPropertyValueService.deletePropertyValueByPropertyId(id); } private void validatePropertyExists(Long id) { if (productPropertyMapper.selectById(id) == null) { throw exception(PROPERTY_NOT_EXISTS); } } @Override public PageResult getPropertyPage(ProductPropertyPageReqVO pageReqVO) { return productPropertyMapper.selectPage(pageReqVO); } @Override public ProductPropertyDO getProperty(Long id) { return productPropertyMapper.selectById(id); } @Override public List getPropertyList(Collection ids) { return productPropertyMapper.selectByIds(ids); } @Override public List getPropertyList() { return productPropertyMapper.selectList(); } }