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("开始日期不能晚于结束日期");
|
}
|
}
|
}
|