package com.oying.modules.pc.product.service.impl; 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.BadRequestException; import com.oying.modules.pc.common.core.constrant.AuditStatusEnum; import com.oying.modules.pc.product.domain.ProductAudit; import com.oying.modules.pc.product.domain.dto.ProductAuditQueryCriteria; import com.oying.modules.pc.product.events.ProductAuditVerdictEvent; import com.oying.modules.pc.product.mapper.ProductAuditMapper; import com.oying.modules.pc.product.service.ProductAuditService; import com.oying.modules.pc.store.domain.StoreAudit; import com.oying.utils.FileUtil; import com.oying.utils.PageResult; import com.oying.utils.PageUtil; import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * @author lzp * @description 服务实现 * @date 2025-07-01 **/ @Service @RequiredArgsConstructor public class ProductAuditServiceImpl extends ServiceImpl implements ProductAuditService { private final ApplicationEventPublisher eventPublisher; private final ProductAuditMapper productAuditMapper; @Override public PageResult queryAll(ProductAuditQueryCriteria criteria, Page page) { return PageUtil.toPage(productAuditMapper.findAll(criteria, page)); } @Override public List queryAll(ProductAuditQueryCriteria criteria) { return productAuditMapper.findAll(criteria); } @Override public ProductAudit getByProductId(Long productId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(ProductAudit::getProductId, productId); return productAuditMapper.selectOne(wrapper); } @Override public boolean hasPendingByStoreId(Long productId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(ProductAudit::getProductId, productId) .eq(ProductAudit::getStatus, AuditStatusEnum.PENDING.getValue()); return productAuditMapper.selectCount(wrapper) > 0; } @Override @Transactional(rollbackFor = Exception.class) public void create(ProductAudit resources) { productAuditMapper.insert(resources); } @Override @Transactional(rollbackFor = Exception.class) public void update(ProductAudit resources, boolean isDirectUpdate) { if (isDirectUpdate) { productAuditMapper.updateById(resources); } else { ProductAudit existingRevision = this.getById(resources.getAuditor()); existingRevision.copy(resources); productAuditMapper.updateById(existingRevision); } } @Override @Transactional(rollbackFor = Exception.class) public void processVerdict(ProductAudit resources) { AuditStatusEnum newAuditStatus = AuditStatusEnum.get(resources.getStatus()); ProductAudit existingAudit = this.getById(resources.getAuditId()); AuditStatusEnum existingAuditStatus = AuditStatusEnum.getOrDefault(existingAudit.getStatus(), AuditStatusEnum.DRAFT); if (!existingAuditStatus.nextContains(newAuditStatus)) { throw new BadRequestException("审核状态错误"); } existingAudit.copy(resources); productAuditMapper.updateById(existingAudit); eventPublisher.publishEvent(new ProductAuditVerdictEvent(existingAudit.getAuditId())); } @Override @Transactional(rollbackFor = Exception.class) public void deleteAll(List ids) { productAuditMapper.deleteBatchIds(ids); } @Override public void download(List all, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); for (ProductAudit productAudit : all) { Map map = new LinkedHashMap<>(); map.put("审核ID", productAudit.getAuditId()); map.put("商品ID", productAudit.getProductId()); map.put("审批ID", productAudit.getAuditId()); map.put("类型", productAudit.getType()); map.put("新数据", productAudit.getData()); map.put("创建人", productAudit.getCreateBy()); map.put("创建时间", productAudit.getCreateTime()); map.put("修改人", productAudit.getUpdateBy()); map.put("修改时间", productAudit.getUpdateTime()); list.add(map); } FileUtil.downloadExcel(list, response); } }