chenrui
2025-05-20 1fd5eac12e532a9906e0c1d57676c692c68d1f32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.ruoyi.purchase.service.impl;
 
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.purchase.dto.InvoicePurchaseDto;
import com.ruoyi.purchase.mapper.InvoicePurchaseMapper;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
import com.ruoyi.purchase.pojo.InvoicePurchase;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.purchase.service.IInvoicePurchaseService;
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.pojo.CommonFile;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
 
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * 发票信息Service业务层处理
 *
 * @author ruoyi
 * @date 2025-05-14
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class InvoicePurchaseServiceImpl extends ServiceImpl<InvoicePurchaseMapper, InvoicePurchase> implements IInvoicePurchaseService {
 
    private final InvoicePurchaseMapper invoicePurchaseMapper;
 
    private final PurchaseLedgerMapper purchaseLedgerMapper;
 
    private final SysUserMapper userMapper;
 
    private final CommonFileMapper commonFileMapper;
 
    private final TempFileMapper tempFileMapper;
 
    @Value("${file.upload-dir}")
    private String uploadDir;
 
    @Override
    public List<InvoicePurchaseDto> selectInvoicePurchaseList(InvoicePurchaseDto invoicePurchaseDto) {
        // 构建发票查询条件
        LambdaQueryWrapper<InvoicePurchase> queryWrapper = new LambdaQueryWrapper<>();
        Optional.ofNullable(invoicePurchaseDto)
                .ifPresent(dto -> {
                    if (StringUtils.hasText(dto.getPurchaseContractNo())) {
                        queryWrapper.like(InvoicePurchase::getPurchaseContractNo, dto.getPurchaseContractNo());
                    }
                    if (StringUtils.hasText(dto.getSupplierName())) {
                        queryWrapper.like(InvoicePurchase::getSupplierName, dto.getSupplierName());
                    }
                    // 处理日期类型字段
                    if (dto.getIssueDate() != null) {
                        queryWrapper.eq(InvoicePurchase::getIssueDate,invoicePurchaseDto.getIssueDate());
                    }
                });
 
        // 查询发票列表
        List<InvoicePurchase> invoiceList = invoicePurchaseMapper.selectList(queryWrapper);
 
        // 如果没有查询到发票,直接返回空列表
        if (CollectionUtils.isEmpty(invoiceList)) {
            return Collections.emptyList();
        }
 
        // 提取所有发票ID
        List<Long> invoiceIds = invoiceList.stream()
                .map(InvoicePurchase::getId)
                .collect(Collectors.toList());
 
        // 批量查询这些发票关联的文件信息
        LambdaQueryWrapper<CommonFile> fileQueryWrapper = new LambdaQueryWrapper<>();
        fileQueryWrapper.in(CommonFile::getCommonId, invoiceIds)
                .eq(CommonFile::getType,"3");
        List<CommonFile> fileList = commonFileMapper.selectList(fileQueryWrapper);
 
        // 将文件信息映射到对应的发票ID
        Map<Long, String> fileMap = fileList.stream()
                .collect(Collectors.toMap(
                        CommonFile::getCommonId,
                        CommonFile::getName,
                        (existing, replacement) -> existing // 如果有多个文件,取第一个
                ));
 
        // 将文件信息设置到发票DTO中
        List<InvoicePurchaseDto> resultList = new ArrayList<>();
        for (InvoicePurchase invoice : invoiceList) {
            InvoicePurchaseDto dto = new InvoicePurchaseDto();
            // 将InvoicePurchase的属性复制到DTO
            BeanUtils.copyProperties(invoice, dto);
            // 设置文件名,如果存在的话
            dto.setFileName(fileMap.getOrDefault(invoice.getId(), null));
            resultList.add(dto);
        }
 
        return resultList;
    }
 
    @Override
    public int delInvoice(Long[] ids) {
        return invoicePurchaseMapper.deleteBatchIds(Arrays.asList(ids));
    }
 
    @Override
    public int addOrUpdateInvoice(InvoicePurchaseDto invoicePurchaseDto) throws IOException {
        int i;
        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(invoicePurchaseDto.getPurchaseLedgerId());
        InvoicePurchase invoicePurchase = new InvoicePurchase();
        BeanUtils.copyProperties(invoicePurchaseDto, invoicePurchase);
        invoicePurchase.setPurchaseContractNo(purchaseLedger.getPurchaseContractNumber());
        invoicePurchase.setSalesContractNo(purchaseLedger.getSalesContractNo());
        SysUser sysUser = userMapper.selectUserById(invoicePurchase.getIssUerId());
        invoicePurchase.setIssUer(sysUser.getNickName());
        invoicePurchase.setTenantId(purchaseLedger.getTenantId());
        if (invoicePurchaseDto.getId() == null) {
            i = invoicePurchaseMapper.insert(invoicePurchase);
        } else {
            i = invoicePurchaseMapper.updateById(invoicePurchase);
        }
 
        // 迁移临时文件到正式目录
//        if (invoicePurchaseDto.getTempFileIds() != null && !invoicePurchaseDto.getTempFileIds().isEmpty()) {
//            migrateTempFilesToFormal(invoicePurchase.getId(), invoicePurchaseDto.getTempFileIds());
//        }
 
        return i;
    }
 
    @Override
    public InvoicePurchaseDto getInvoiceById(InvoicePurchaseDto invoicePurchaseDto) {
        InvoicePurchase invoicePurchase = invoicePurchaseMapper.selectById(invoicePurchaseDto.getId());
        InvoicePurchaseDto resultDto = new InvoicePurchaseDto();
        BeanUtils.copyProperties(invoicePurchase, resultDto);
 
        // 查询上传文件
        LambdaQueryWrapper<CommonFile> commonFileLambdaQueryWrapper = new LambdaQueryWrapper<>();
        commonFileLambdaQueryWrapper.eq(CommonFile::getCommonId, invoicePurchaseDto.getId())
                .eq(CommonFile::getType, "3");
        List<CommonFile> commonFiles = commonFileMapper.selectList(commonFileLambdaQueryWrapper);
        resultDto.setCommonFiles(commonFiles);
        return resultDto;
    }
 
    @Override
    public List<InvoicePurchase> selectInvoicePurchaseLists(InvoicePurchase invoicePurchase) {
        return invoicePurchaseMapper.selectList(new LambdaQueryWrapper<>());
    }
}