package com.ruoyi.basic.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.dto.StorageBlobVO; import com.ruoyi.basic.dto.SupplierContractRecordDto; import com.ruoyi.basic.enums.RecordTypeEnum; import com.ruoyi.basic.mapper.SupplierContractRecordMapper; import com.ruoyi.basic.pojo.SupplierContractRecord; import com.ruoyi.basic.service.SupplierContractRecordService; import com.ruoyi.basic.utils.FileUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** * 供应商合同记录Service实现类 * * @author ruoyi * @date 2026-06-24 */ @Service @RequiredArgsConstructor public class SupplierContractRecordServiceImpl extends ServiceImpl implements SupplierContractRecordService { private final SupplierContractRecordMapper supplierContractRecordMapper; private final FileUtil fileUtil; @Override public List selectListBySupplierId(Long supplierId) { List records = supplierContractRecordMapper.selectListBySupplierId(supplierId); return records.stream().map(record -> { SupplierContractRecordDto dto = new SupplierContractRecordDto(); BeanUtils.copyProperties(record, dto); // 获取附件列表 List files = fileUtil.getStorageBlobVOsByRecordTypeAndRecordId( RecordTypeEnum.SUPPLIER_CONTRACT_RECORD, record.getId()); dto.setFileList(files); return dto; }).collect(Collectors.toList()); } @Override public SupplierContractRecordDto selectDetailById(Long id) { SupplierContractRecord record = supplierContractRecordMapper.selectById(id); if (record == null) { return null; } SupplierContractRecordDto dto = new SupplierContractRecordDto(); BeanUtils.copyProperties(record, dto); // 获取附件列表 List files = fileUtil.getStorageBlobVOsByRecordTypeAndRecordId( RecordTypeEnum.SUPPLIER_CONTRACT_RECORD, id); dto.setFileList(files); return dto; } @Override @Transactional(rollbackFor = Exception.class) public int insertSupplierContractRecord(SupplierContractRecordDto dto) { SupplierContractRecord record = new SupplierContractRecord(); BeanUtils.copyProperties(dto, record); int result = supplierContractRecordMapper.insert(record); // 保存附件 if (dto.getStorageBlobDTOs() != null && !dto.getStorageBlobDTOs().isEmpty()) { fileUtil.saveStorageAttachmentByRecordTypeAndRecordId( "file", RecordTypeEnum.SUPPLIER_CONTRACT_RECORD, record.getId(), dto.getStorageBlobDTOs()); } // 返回新增记录的ID dto.setId(record.getId()); return result; } @Override @Transactional(rollbackFor = Exception.class) public int updateSupplierContractRecord(SupplierContractRecordDto dto) { SupplierContractRecord record = new SupplierContractRecord(); BeanUtils.copyProperties(dto, record); int result = supplierContractRecordMapper.updateById(record); // 更新附件 if (dto.getStorageBlobDTOs() != null) { fileUtil.saveStorageAttachmentByRecordTypeAndRecordId( "file", RecordTypeEnum.SUPPLIER_CONTRACT_RECORD, record.getId(), dto.getStorageBlobDTOs()); } return result; } @Override @Transactional(rollbackFor = Exception.class) public int deleteSupplierContractRecord(Long id) { // 删除附件 fileUtil.deleteStorageAttachmentsByRecordTypeAndRecordId(RecordTypeEnum.SUPPLIER_CONTRACT_RECORD, id); return supplierContractRecordMapper.deleteById(id); } @Override public List selectFilesByMasterContractNo(String masterContractNo) { // 根据总合同号查询合同记录 SupplierContractRecord record = supplierContractRecordMapper.selectOne( new LambdaQueryWrapper() .eq(SupplierContractRecord::getMasterContractNo, masterContractNo) .last("LIMIT 1")); if (record == null) { return Collections.emptyList(); } // 获取附件列表 return fileUtil.getStorageBlobVOsByRecordTypeAndRecordId( RecordTypeEnum.SUPPLIER_CONTRACT_RECORD, record.getId()); } }