liding
2026-10-24 f8c024b1c1de318a4de485e048d1044cd6dcaa53
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
package com.ruoyi.inspect.service.impl;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.dto.SealUsageCopiesUpdate;
import com.ruoyi.inspect.dto.SealUsageExportRequest;
import com.ruoyi.inspect.dto.SealUsageLedgerQuery;
import com.ruoyi.inspect.mapper.SealUsageLedgerMapper;
import com.ruoyi.inspect.pojo.InsReport;
import com.ruoyi.inspect.pojo.SealUsageLedger;
import com.ruoyi.inspect.service.SealUsageLedgerService;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.system.mapper.UserMapper;
import jakarta.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
 
@Service
public class SealUsageLedgerServiceImpl implements SealUsageLedgerService {
 
    @Resource
    private SealUsageLedgerMapper ledgerMapper;
 
    @Resource
    private UserMapper userMapper;
 
    @Override
    public IPage<SealUsageLedger> page(Page<SealUsageLedger> page, SealUsageLedgerQuery query) {
        validateDateRange(query);
        return ledgerMapper.selectLedgerPage(page, query);
    }
 
    @Override
    public void updateCopies(SealUsageCopiesUpdate update) {
        if (update == null || update.getId() == null || update.getVersion() == null) {
            throw new ErrorException("缺少台账记录或版本信息");
        }
        if (update.getCopies() == null || update.getCopies() < 1) {
            throw new ErrorException("份数必须为正整数");
        }
        int affected = ledgerMapper.updateCopies(update.getId(), update.getCopies(), update.getVersion(),
                SecurityUtils.getUserId().intValue());
        if (affected != 1) {
            if (ledgerMapper.selectById(update.getId()) == null) {
                throw new ErrorException("用印台账记录不存在");
            }
            throw new ErrorException("记录已被修改,请刷新后重试");
        }
    }
 
    @Override
    public List<SealUsageLedger> listForExport(SealUsageExportRequest request) {
        if (request == null || StringUtils.isBlank(request.getMode())) {
            throw new ErrorException("请选择导出方式");
        }
        List<SealUsageLedger> result;
        if ("selected".equals(request.getMode())) {
            if (request.getIds() == null || request.getIds().isEmpty()) {
                throw new ErrorException("请选择要导出的记录");
            }
            List<Long> ids = new ArrayList<>(new LinkedHashSet<>(request.getIds()));
            if (ids.stream().anyMatch(Objects::isNull)) {
                throw new ErrorException("导出记录参数不正确");
            }
            result = ledgerMapper.selectForExport(null, ids);
            if (result.size() != ids.size()) {
                throw new ErrorException("部分用印台账记录不存在或无权访问");
            }
        } else if ("filtered".equals(request.getMode())) {
            SealUsageLedgerQuery query = request.getQuery() == null ? new SealUsageLedgerQuery() : request.getQuery();
            validateDateRange(query);
            result = ledgerMapper.selectForExport(query, null);
        } else {
            throw new ErrorException("不支持的导出方式");
        }
        if (result.isEmpty()) {
            throw new ErrorException("暂无可导出的记录");
        }
        return result;
    }
 
    @Override
    public void recordApprovedReport(InsReport report) {
        if (report == null || report.getId() == null || report.getRatifyTime() == null
                || report.getRatifyUserId() == null || StringUtils.isBlank(report.getCode())
                || StringUtils.isBlank(report.getSealNames())) {
            throw new ErrorException("报告批准信息不完整,无法生成用印台账");
        }
        User ratifyUser = userMapper.selectById(report.getRatifyUserId());
        if (ratifyUser == null || StringUtils.isBlank(ratifyUser.getName())) {
            throw new ErrorException("找不到报告批准人,无法生成用印台账");
        }
        String projectName = StringUtils.defaultString(ledgerMapper.selectProjectName(report.getInsOrderId()));
 
        SealUsageLedger ledger = new SealUsageLedger();
        ledger.setReportId(report.getId());
        ledger.setReportCode(report.getCode());
        ledger.setInsOrderId(report.getInsOrderId());
        ledger.setUseTime(report.getRatifyTime());
        ledger.setSealIds(report.getSealIds());
        ledger.setSealNames(report.getSealNames());
        ledger.setProjectName(projectName);
        ledger.setUseUserId(report.getRatifyUserId());
        ledger.setUseUserName(ratifyUser.getName());
        ledger.setCopies(1);
        ledger.setVersion(0);
        ledgerMapper.insert(ledger);
    }
 
    private void validateDateRange(SealUsageLedgerQuery query) {
        if (query != null && query.getStartDate() != null && query.getEndDate() != null
                && query.getStartDate().isAfter(query.getEndDate())) {
            throw new ErrorException("开始日期不能晚于结束日期");
        }
    }
}