zepengdev
2025-07-14 43315000b2840313a5aff96bf314b3c061e4616d
oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreQualificationServiceImpl.java
@@ -1,79 +1,148 @@
package com.oying.modules.pc.store.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjUtil;
import com.oying.exception.EntityExistException;
import com.oying.modules.pc.common.id.StoreQualificationIdGenerator;
import com.oying.modules.pc.store.domain.StoreQualification;
import com.oying.modules.pc.store.domain.dto.StoreQualificationQueryCriteria;
import com.oying.modules.pc.store.mapper.StoreQualificationMapper;
import com.oying.modules.pc.store.service.StoreQualificationService;
import com.oying.utils.*;
import lombok.RequiredArgsConstructor;
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.time.ZonedDateTime;
import java.util.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @description 服务实现
* @author lzp
* @date 2025-04-27
**/
 * @author lzp
 * @description 服务实现
 * @date 2025-04-27
 **/
@Service
@RequiredArgsConstructor
public class StoreQualificationServiceImpl extends ServiceImpl<StoreQualificationMapper, StoreQualification> implements StoreQualificationService {
    private final StoreQualificationMapper storeQualificationMapper;
    private final BucketStorageService bucketStorageService;
    @Override
    public PageResult<StoreQualification> queryAll(StoreQualificationQueryCriteria criteria, Page<Object> page){
    public PageResult<StoreQualification> queryAll(StoreQualificationQueryCriteria criteria, Page<Object> page) {
        return PageUtil.toPage(storeQualificationMapper.findAll(criteria, page));
    }
    @Override
    public List<StoreQualification> queryAll(StoreQualificationQueryCriteria criteria){
    public List<StoreQualification> queryAll(StoreQualificationQueryCriteria criteria) {
        return storeQualificationMapper.findAll(criteria);
    }
    @Override
    public List<StoreQualification> queryBatchIds(List<Long> ids) {
        LambdaQueryWrapper<StoreQualification> wrapper = new LambdaQueryWrapper<>();
        wrapper.in(StoreQualification::getQualificationId, ids);
        return storeQualificationMapper.selectList(wrapper);
    }
    @Override
    public List<StoreQualification> getByStoreId(Long storeId) {
        LambdaQueryWrapper<StoreQualification> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(StoreQualification::getStoreId, storeId);
        return storeQualificationMapper.selectList(wrapper);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(StoreQualification resources) {
        // resources.setQualificationId(StoreQualificationIdGenerator.getId());
        resources.setCreateBy(SecurityUtils.getCurrentUserId());
        resources.setCreateTime(ZonedDateTime.now());
        storeQualificationMapper.insert(resources);
    }
    @Override
    public void batchCreate(List<StoreQualification> resources) {
        resources.forEach(i-> {
            i.setCreateBy(SecurityUtils.getCurrentUserId());
            i.setCreateTime(ZonedDateTime.now());
        });
        this.saveBatch(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(StoreQualification resources) {
        // resources.setUpdateBy();
        Long qualificationId = resources.getQualificationId();
    public void update(StoreQualificationUpdateRequest request) {
        Long qualificationId = request.getQualificationId();
        StoreQualification existingStoreQualification = this.getById(qualificationId);
        if (ObjUtil.isEmpty(existingStoreQualification)) {
            throw new EntityExistException(StoreQualification.class, "id", Optional.ofNullable(qualificationId).map(Object::toString).orElse("null"));
            throw new EntityNotFoundException(StoreQualification.class, "qualificationId", Optional.ofNullable(qualificationId).map(Object::toString).orElse("null"));
        }
        existingStoreQualification.copy(resources);
        // 新的资质数据
        StoreQualification newStoreQualification = StoreQualificationAssembler.to(request);
        // 记录图片值的变更
        ValueUpdate<Long> 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<StoreQualificationUpdateRequest> requests) {
        List<Long> updateIds = requests.stream().map(StoreQualificationUpdateRequest::getQualificationId).collect(Collectors.toList());
        List<StoreQualification> existingStoreQualifications = this.queryBatchIds(updateIds);
        if (CollectionUtil.isEmpty(existingStoreQualifications)) {
            throw new EntityNotFoundException(StoreQualification.class, "qualificationIds", updateIds.toString());
        }
        Map<Long, StoreQualificationUpdateRequest> requestMap = requests.stream().collect(Collectors.toMap(
                StoreQualificationUpdateRequest::getQualificationId,
                storeQualificationUpdateRequest -> storeQualificationUpdateRequest
        ));
        // 提取需要删除的图片原纪录ID
        List<Long> 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<Long> ids) {
        List<StoreQualification> existingStoreQualifications = this.queryBatchIds(ids);
        if (CollectionUtil.isEmpty(existingStoreQualifications)) {
            throw new EntityNotFoundException(StoreQualification.class, "qualificationIds", ids.toString());
        }
        storeQualificationMapper.deleteBatchIds(ids);
        // 删除旧图片原记录
        List<Long> bucketStorageIds = existingStoreQualifications.stream().map(StoreQualification::getQualificationImageId).collect(Collectors.toList());
        if (CollectionUtil.isNotEmpty(bucketStorageIds)) {
            bucketStorageService.deleteAll(bucketStorageIds);
        }
    }
}