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.CustomerContractRecordDto; import com.ruoyi.basic.dto.StorageBlobVO; import com.ruoyi.basic.enums.RecordTypeEnum; import com.ruoyi.basic.mapper.CustomerContractRecordMapper; import com.ruoyi.basic.pojo.CustomerContractRecord; import com.ruoyi.basic.service.CustomerContractRecordService; 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 CustomerContractRecordServiceImpl extends ServiceImpl implements CustomerContractRecordService { private final CustomerContractRecordMapper customerContractRecordMapper; private final FileUtil fileUtil; @Override public List selectListByCustomerId(Long customerId) { List records = customerContractRecordMapper.selectListByCustomerId(customerId); return records.stream().map(record -> { CustomerContractRecordDto dto = new CustomerContractRecordDto(); BeanUtils.copyProperties(record, dto); // 获取附件列表 List files = fileUtil.getStorageBlobVOsByRecordTypeAndRecordId( RecordTypeEnum.CUSTOMER_CONTRACT_RECORD, record.getId()); dto.setFileList(files); return dto; }).collect(Collectors.toList()); } @Override public CustomerContractRecordDto selectDetailById(Long id) { CustomerContractRecord record = customerContractRecordMapper.selectById(id); if (record == null) { return null; } CustomerContractRecordDto dto = new CustomerContractRecordDto(); BeanUtils.copyProperties(record, dto); // 获取附件列表 List files = fileUtil.getStorageBlobVOsByRecordTypeAndRecordId( RecordTypeEnum.CUSTOMER_CONTRACT_RECORD, id); dto.setFileList(files); return dto; } @Override @Transactional(rollbackFor = Exception.class) public int insertCustomerContractRecord(CustomerContractRecordDto dto) { CustomerContractRecord record = new CustomerContractRecord(); BeanUtils.copyProperties(dto, record); int result = customerContractRecordMapper.insert(record); // 保存附件 if (dto.getStorageBlobDTOs() != null && !dto.getStorageBlobDTOs().isEmpty()) { fileUtil.saveStorageAttachmentByRecordTypeAndRecordId( "file", RecordTypeEnum.CUSTOMER_CONTRACT_RECORD, record.getId(), dto.getStorageBlobDTOs()); } // 返回新增记录的ID dto.setId(record.getId()); return result; } @Override @Transactional(rollbackFor = Exception.class) public int updateCustomerContractRecord(CustomerContractRecordDto dto) { CustomerContractRecord record = new CustomerContractRecord(); BeanUtils.copyProperties(dto, record); int result = customerContractRecordMapper.updateById(record); // 更新附件 if (dto.getStorageBlobDTOs() != null) { fileUtil.saveStorageAttachmentByRecordTypeAndRecordId( "file", RecordTypeEnum.CUSTOMER_CONTRACT_RECORD, record.getId(), dto.getStorageBlobDTOs()); } return result; } @Override @Transactional(rollbackFor = Exception.class) public int deleteCustomerContractRecord(Long id) { // 删除附件 fileUtil.deleteStorageAttachmentsByRecordTypeAndRecordId(RecordTypeEnum.CUSTOMER_CONTRACT_RECORD, id); return customerContractRecordMapper.deleteById(id); } @Override public List selectFilesByMasterContractNo(String masterContractNo) { // 根据总合同号查询合同记录 CustomerContractRecord record = customerContractRecordMapper.selectOne( new LambdaQueryWrapper() .eq(CustomerContractRecord::getMasterContractNo, masterContractNo) .last("LIMIT 1")); if (record == null) { return Collections.emptyList(); } // 获取附件列表 return fileUtil.getStorageBlobVOsByRecordTypeAndRecordId( RecordTypeEnum.CUSTOMER_CONTRACT_RECORD, record.getId()); } }