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(); } }