| | |
| | | import com.ruoyi.basic.pojo.ProductModel; |
| | | import com.ruoyi.basic.service.IProductService; |
| | | import com.ruoyi.basic.vo.ProductModelVo; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.bean.BeanUtils; |
| | | import com.ruoyi.stock.mapper.StockInventoryMapper; |
| | | import com.ruoyi.stock.pojo.StockInventory; |
| | | import lombok.AllArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | | @AllArgsConstructor |
| | |
| | | private ProductMapper productMapper; |
| | | |
| | | private ProductModelMapper productModelMapper; |
| | | |
| | | private StockInventoryMapper stockInventoryMapper; |
| | | |
| | | @Override |
| | | public List<ProductTreeDto> selectProductList(ProductDto productDto) { |
| | |
| | | |
| | | @Override |
| | | public int delProductByIds(Long[] ids) { |
| | | // 1. 删除子表 product_model 中关联的数据 |
| | | List<Long> idList = Arrays.asList(ids); |
| | | |
| | | // 1. 存在子分类时不允许删除,避免树结构出现孤儿节点 |
| | | LambdaQueryWrapper<Product> childWrapper = new LambdaQueryWrapper<>(); |
| | | childWrapper.in(Product::getParentId, idList); |
| | | if (productMapper.selectCount(childWrapper) > 0) { |
| | | throw new ServiceException("该产品下存在子分类,请先删除子分类"); |
| | | } |
| | | |
| | | // 2. 规格已被库存记录引用时不允许删除,避免历史数据断链 |
| | | LambdaQueryWrapper<ProductModel> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.in(ProductModel::getProductId, ids); |
| | | productModelMapper.delete(queryWrapper); |
| | | queryWrapper.in(ProductModel::getProductId, idList); |
| | | List<ProductModel> models = productModelMapper.selectList(queryWrapper); |
| | | if (!models.isEmpty()) { |
| | | List<Long> modelIds = models.stream().map(ProductModel::getId).collect(Collectors.toList()); |
| | | LambdaQueryWrapper<StockInventory> stockWrapper = new LambdaQueryWrapper<>(); |
| | | stockWrapper.in(StockInventory::getProductModelId, modelIds); |
| | | if (stockInventoryMapper.selectCount(stockWrapper) > 0) { |
| | | throw new ServiceException("该产品规格已存在库存记录,不能删除"); |
| | | } |
| | | productModelMapper.delete(queryWrapper); |
| | | } |
| | | |
| | | // 2. 删除主表 product 数据 |
| | | int deleteCount = productMapper.deleteBatchIds(Arrays.asList(ids)); |
| | | |
| | | return deleteCount; |
| | | // 3. 删除主表 product 数据 |
| | | return productMapper.deleteBatchIds(idList); |
| | | } |
| | | |
| | | } |