package com.oying.modules.pc.store.service.impl; import cn.hutool.core.collection.CollectionUtil; 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.google.common.collect.Lists; import com.oying.exception.EntityExistException; import com.oying.exception.EntityNotFoundException; import com.oying.modules.pc.common.ValueUpdate; import com.oying.modules.pc.store.converter.StoreQualificationAssembler; import com.oying.modules.pc.store.domain.StoreQualification; import com.oying.modules.pc.store.domain.dto.StoreQualificationQueryCriteria; import com.oying.modules.pc.store.domain.dto.StoreQualificationUpdateRequest; import com.oying.modules.pc.store.mapper.StoreQualificationMapper; import com.oying.modules.pc.store.service.StoreQualificationService; 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.Map; import java.util.Optional; import java.util.stream.Collectors; /** * @author lzp * @description 服务实现 * @date 2025-04-27 **/ @Service @RequiredArgsConstructor public class StoreQualificationServiceImpl extends ServiceImpl implements StoreQualificationService { private final StoreQualificationMapper storeQualificationMapper; private final BucketStorageService bucketStorageService; @Override public PageResult queryAll(StoreQualificationQueryCriteria criteria, Page page) { return PageUtil.toPage(storeQualificationMapper.findAll(criteria, page)); } @Override public List queryAll(StoreQualificationQueryCriteria criteria) { return storeQualificationMapper.findAll(criteria); } @Override public List queryBatchIds(List ids) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(StoreQualification::getQualificationId, ids); return storeQualificationMapper.selectList(wrapper); } @Override public List queryByStoreId(Long storeId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(StoreQualification::getStoreId, storeId); return storeQualificationMapper.selectList(wrapper); } @Override @Transactional(rollbackFor = Exception.class) public void create(StoreQualification resources) { storeQualificationMapper.insert(resources); } @Override public void batchCreate(List resources) { this.saveBatch(resources); } @Override @Transactional(rollbackFor = Exception.class) public void update(StoreQualificationUpdateRequest request) { Long qualificationId = request.getQualificationId(); StoreQualification existingStoreQualification = this.getById(qualificationId); if (ObjUtil.isEmpty(existingStoreQualification)) { throw new EntityNotFoundException(StoreQualification.class, "qualificationId", Optional.ofNullable(qualificationId).map(Object::toString).orElse("null")); } // 新的资质数据 StoreQualification newStoreQualification = StoreQualificationAssembler.to(request); // 记录图片值的变更 ValueUpdate imageValueUpdate = new ValueUpdate<>(newStoreQualification.getQualificationImageId(), existingStoreQualification.getQualificationImageId()); // 填充新的数据 existingStoreQualification.copy(newStoreQualification); storeQualificationMapper.updateById(existingStoreQualification); // 删除旧图片原纪录 if (imageValueUpdate.isChangeAndOldValueNotEmpty()) { bucketStorageService.deleteAll(Lists.newArrayList(imageValueUpdate.getOldValue())); } } @Override @Transactional(rollbackFor = Exception.class) public void batchUpdate(List requests) { List updateIds = requests.stream().map(StoreQualificationUpdateRequest::getQualificationId).collect(Collectors.toList()); List existingStoreQualifications = this.queryBatchIds(updateIds); if (CollectionUtil.isEmpty(existingStoreQualifications)) { throw new EntityNotFoundException(StoreQualification.class, "qualificationIds", updateIds.toString()); } Map requestMap = requests.stream().collect(Collectors.toMap( StoreQualificationUpdateRequest::getQualificationId, storeQualificationUpdateRequest -> storeQualificationUpdateRequest )); // 提取需要删除的图片原纪录ID List deleteBucketStorageIds = existingStoreQualifications.stream().filter(i -> { Long newCloudStorageId = requestMap.get(i.getQualificationId()).getImageUploadFileId(); return ValueUpdate.isChangeAndOldValueNotEmpty(newCloudStorageId, i.getQualificationImageId()); }).map(StoreQualification::getQualificationImageId).collect(Collectors.toList()); // 填充新的数据 for (StoreQualification existingStoreQualification : existingStoreQualifications) { StoreQualification newStoreQualification = StoreQualificationAssembler.to(requestMap.get(existingStoreQualification.getQualificationId())); existingStoreQualification.copy(newStoreQualification); } this.updateBatchById(existingStoreQualifications); // 删除旧图片原记录 if (CollectionUtil.isNotEmpty(deleteBucketStorageIds)) { bucketStorageService.deleteAll(deleteBucketStorageIds); } } @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(List ids) { List existingStoreQualifications = this.queryBatchIds(ids); if (CollectionUtil.isEmpty(existingStoreQualifications)) { throw new EntityNotFoundException(StoreQualification.class, "qualificationIds", ids.toString()); } storeQualificationMapper.deleteBatchIds(ids); // 删除旧图片原记录 List bucketStorageIds = existingStoreQualifications.stream().map(StoreQualification::getQualificationImageId).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(bucketStorageIds)) { bucketStorageService.deleteAll(bucketStorageIds); } } }