package jnpf.elnService.impl;
|
|
import jnpf.base.UserInfo;
|
import jnpf.database.util.TenantDataSourceUtil;
|
import jnpf.elnEntity.ElnDocumentFileVo;
|
import jnpf.elnEntity.runtime.ElnRecordEntity;
|
import jnpf.elnEntity.runtime.ElnRecordRevisionEntity;
|
import jnpf.elnEntity.runtime.ElnRecordVos;
|
import jnpf.elnMapper.ElnRecordMapper;
|
import jnpf.elnMapper.ElnRecordRevisionMapper;
|
import jnpf.elnService.ElnRecordQueryService;
|
import jnpf.exception.DataException;
|
import jnpf.model.tenant.TenantVO;
|
import jnpf.util.UserProvider;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.StringUtils;
|
|
import java.util.Objects;
|
|
@Service
|
public class ElnRecordQueryServiceImpl implements ElnRecordQueryService {
|
|
private final ElnRecordMapper recordMapper;
|
private final ElnRecordRevisionMapper revisionMapper;
|
private final TenantProvider tenantProvider;
|
|
@Autowired
|
public ElnRecordQueryServiceImpl(ElnRecordMapper recordMapper,
|
ElnRecordRevisionMapper revisionMapper) {
|
this(recordMapper, revisionMapper, ElnRecordQueryServiceImpl::currentTenant);
|
}
|
|
ElnRecordQueryServiceImpl(ElnRecordMapper recordMapper,
|
ElnRecordRevisionMapper revisionMapper,
|
TenantProvider tenantProvider) {
|
this.recordMapper = recordMapper;
|
this.revisionMapper = revisionMapper;
|
this.tenantProvider = tenantProvider;
|
}
|
|
@Override
|
@Transactional(readOnly = true)
|
public ElnRecordVos.Created getByTestWorkItem(String testWorkItemId) {
|
String itemId = required(testWorkItemId, "检验项不能为空");
|
String tenantId = tenantProvider.get();
|
ElnRecordEntity record = recordMapper.selectLiveByTestWorkItem(tenantId, itemId);
|
if (record == null || !tenantId.equals(record.getFTenantId())
|
|| !itemId.equals(record.getJianyanXiangId())
|
|| !StringUtils.hasText(record.getDangqianXiudingId())) {
|
throw new DataException("检验项电子记录不存在");
|
}
|
|
ElnRecordRevisionEntity revision = revisionMapper.selectById(record.getDangqianXiudingId());
|
if (revision == null || !tenantId.equals(revision.getFTenantId())
|
|| !record.getId().equals(revision.getDianziJiluId())
|
|| !record.getDangqianXiudingId().equals(revision.getId())
|
|| Objects.equals(1, revision.getFDeleteMark())
|
|| !StringUtils.hasText(revision.getJiluWendang())) {
|
throw new DataException("电子记录当前修订不存在或无效");
|
}
|
|
ElnRecordVos.Created result = new ElnRecordVos.Created();
|
result.setRecordId(record.getId());
|
result.setRevisionId(revision.getId());
|
result.setDocument(document(record, revision));
|
result.setExisting(true);
|
return result;
|
}
|
|
private static ElnDocumentFileVo document(
|
ElnRecordEntity record, ElnRecordRevisionEntity revision) {
|
ElnDocumentFileVo document = new ElnDocumentFileVo();
|
document.setFileId(revision.getJiluWendang().trim());
|
document.setName((StringUtils.hasText(record.getJiluBianhao())
|
? record.getJiluBianhao().trim() : record.getId()) + ".docx");
|
document.setFileExtension("docx");
|
return document;
|
}
|
|
private static String currentTenant() {
|
UserInfo user = UserProvider.getUser();
|
if (user == null || !StringUtils.hasText(user.getUserId())) {
|
throw new DataException("当前登录用户无效");
|
}
|
TenantVO routed = TenantDataSourceUtil.getTenantInfo();
|
String tenantId = routed != null && StringUtils.hasText(routed.getEnCode())
|
? routed.getEnCode().trim() : user.getTenantId();
|
return StringUtils.hasText(tenantId) ? tenantId.trim() : "0";
|
}
|
|
private static String required(String value, String message) {
|
if (!StringUtils.hasText(value)) {
|
throw new DataException(message);
|
}
|
return value.trim();
|
}
|
|
@FunctionalInterface
|
interface TenantProvider {
|
String get();
|
}
|
}
|