package cn.iocoder.yudao.module.erp.service.product; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ProductSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductCategoryDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*; /** * ERP 产品 Service 实现类 * * @author 芋道源码 */ @Service @Validated public class ErpProductServiceImpl implements ErpProductService { @Resource private ErpProductMapper productMapper; @Resource private ErpProductCategoryService productCategoryService; @Resource private ErpProductUnitService productUnitService; @Override public Long createProduct(ProductSaveReqVO createReqVO) { // TODO 芋艿:校验分类 // 插入 ErpProductDO product = BeanUtils.toBean(createReqVO, ErpProductDO.class); productMapper.insert(product); // 返回 return product.getId(); } @Override public void updateProduct(ProductSaveReqVO updateReqVO) { // TODO 芋艿:校验分类 // 校验存在 validateProductExists(updateReqVO.getId()); // 更新 ErpProductDO updateObj = BeanUtils.toBean(updateReqVO, ErpProductDO.class); productMapper.updateById(updateObj); } @Override public void deleteProduct(Long id) { // 校验存在 validateProductExists(id); // 删除 productMapper.deleteById(id); } @Override public List validProductList(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyList(); } List list = productMapper.selectBatchIds(ids); Map productMap = convertMap(list, ErpProductDO::getId); for (Long id : ids) { ErpProductDO product = productMap.get(id); if (productMap.get(id) == null) { throw exception(PRODUCT_NOT_EXISTS); } if (CommonStatusEnum.isDisable(product.getStatus())) { throw exception(PRODUCT_NOT_ENABLE, product.getName()); } } return list; } private void validateProductExists(Long id) { if (productMapper.selectById(id) == null) { throw exception(PRODUCT_NOT_EXISTS); } } @Override public ErpProductDO getProduct(Long id) { return productMapper.selectById(id); } @Override public List getProductVOListByStatus(Integer status) { List list = productMapper.selectListByStatus(status); return buildProductVOList(list); } @Override public List getProductVOList(Collection ids) { if (CollUtil.isEmpty(ids)) { return Collections.emptyList(); } List list = productMapper.selectBatchIds(ids); return buildProductVOList(list); } @Override public PageResult getProductVOPage(ErpProductPageReqVO pageReqVO) { PageResult pageResult = productMapper.selectPage(pageReqVO); return new PageResult<>(buildProductVOList(pageResult.getList()), pageResult.getTotal()); } private List buildProductVOList(List list) { if (CollUtil.isEmpty(list)) { return Collections.emptyList(); } Map categoryMap = productCategoryService.getProductCategoryMap( convertSet(list, ErpProductDO::getCategoryId)); Map unitMap = productUnitService.getProductUnitMap( convertSet(list, ErpProductDO::getUnitId)); return BeanUtils.toBean(list, ErpProductRespVO.class, product -> { MapUtils.findAndThen(categoryMap, product.getCategoryId(), category -> product.setCategoryName(category.getName())); MapUtils.findAndThen(unitMap, product.getUnitId(), unit -> product.setUnitName(unit.getName())); }); } @Override public Long getProductCountByCategoryId(Long categoryId) { return productMapper.selectCountByCategoryId(categoryId); } @Override public Long getProductCountByUnitId(Long unitId) { return productMapper.selectCountByUnitId(unitId); } }