package com.oying.modules.pc.category.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.oying.exception.EntityExistException; import com.oying.exception.EntityNotFoundException; import com.oying.modules.pc.category.converter.PlatformCategoryAssembler; import com.oying.modules.pc.category.domain.PlatformCategory; import com.oying.modules.pc.category.domain.dto.PlatformCategoryCreateRequest; import com.oying.modules.pc.category.domain.dto.PlatformCategoryQueryCriteria; import com.oying.modules.pc.category.domain.dto.PlatformCategoryUpdateDto; import com.oying.modules.pc.category.mapper.PlatformCategoryMapper; import com.oying.modules.pc.category.service.PlatformCategoryService; import com.oying.modules.pc.common.ValueUpdate; import com.oying.modules.pc.store.domain.StoreQualification; import com.oying.modules.pc.utils.ImageUtils; import com.oying.service.BucketStorageService; import com.oying.utils.PageResult; import com.oying.utils.PageUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; /** * 平台类目服务实现 * * @author lzp * @date 2025-04-30 **/ @Service @RequiredArgsConstructor public class PlatformCategoryServiceImpl extends ServiceImpl implements PlatformCategoryService { private final PlatformCategoryMapper platformCategoryMapper; private final BucketStorageService bucketStorageService; @Override public PageResult queryAll(PlatformCategoryQueryCriteria criteria, Page page) { return PageUtil.toPage(platformCategoryMapper.findAll(criteria, page)); } @Override public List queryAll(PlatformCategoryQueryCriteria criteria) { return platformCategoryMapper.findAll(criteria); } @Override public List queryBatchIds(List ids) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(PlatformCategory::getCategoryId, ids); return platformCategoryMapper.selectList(wrapper); } @Override @Transactional(rollbackFor = Exception.class) public void create(PlatformCategoryCreateRequest request) { platformCategoryMapper.insert(PlatformCategoryAssembler.to(request)); } @Override @Transactional(rollbackFor = Exception.class) public void update(PlatformCategoryUpdateDto updateDto) { Long categoryId = updateDto.getCategoryId(); PlatformCategory existingPlatformCategory = this.getById(categoryId); if (ObjUtil.isEmpty(existingPlatformCategory)) { throw new EntityNotFoundException(PlatformCategory.class, "categoryId", Optional.ofNullable(categoryId).map(Object::toString).orElse("null")); } // 新的类目数据 PlatformCategory newPlatformCategory = PlatformCategoryAssembler.to(updateDto); // 记录图片值的变更 ValueUpdate iconValueUpdate = new ValueUpdate<>(newPlatformCategory.getIconId(), existingPlatformCategory.getIconId()); // 填充新的数据 existingPlatformCategory.copy(newPlatformCategory); platformCategoryMapper.updateById(existingPlatformCategory); // 删除旧图片原纪录 if (iconValueUpdate.isChangeAndOldValueNotEmpty()) { bucketStorageService.deleteAll(ListUtil.toList(iconValueUpdate.getOldValue())); } } @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(List ids) { List existingPlatformCategories = this.queryBatchIds(ids); if (CollectionUtil.isEmpty(existingPlatformCategories)) { throw new EntityNotFoundException(PlatformCategory.class, "platformCategoryIds", ids.toString()); } platformCategoryMapper.deleteBatchIds(ids); List storageIds = existingPlatformCategories.stream().map(PlatformCategory::getIconId).collect(Collectors.toList()); // 删除旧图片原记录 if (CollectionUtil.isNotEmpty(storageIds)) { bucketStorageService.deleteAll(storageIds); } } }