package jnpf.dmsService; import jnpf.dmsEntity.center.DmsCenterVersionSnapshot; import jnpf.dmsEntity.banben.DmsWenjianBanbenJiesuanModel; import jnpf.dmsEntity.storage.approval.DmsApprovedItem; import jnpf.dmsMapper.DmsApprovedBatchMapper; import jnpf.dmsMapper.DmsApprovedMetadataMapper; import jnpf.exception.DataException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class DmsApprovedFileProjection { private final DmsApprovedBatchMapper receipts; private final jnpf.dmsService.center.DmsCenterQueryService center; private final DmsApprovedMetadataMapper metadata; public void enrich(DmsWenjianBanbenJiesuanModel model) { DmsApprovedItem item = receipts.item(model.getTenantId(), model.getLaiyuanYewuJian()); if (item == null) throw new DataException("未找到完整的批准文件接收回执"); DmsCenterVersionSnapshot version = center.version(model.getTenantId(), item.getFileVersionId()); if (version == null || !"EFFECTIVE".equals(version.lifecycleStatus()) || version.effectiveFrom() == null) throw new DataException("文件中心版本尚未生效,不能回写正式业务版本"); if (!item.getDocumentId().equals(version.documentId())) throw new DataException("批准回执与中心版本所属文件不一致"); DmsWenjianBanbenJiesuanModel source = metadata.selectSource(model.getTenantId(), model.getLaiyuanDanjuLeixing(), model.getLaiyuanDanjuId(), model.getLaiyuanZixiangId()); if (source == null || version.fileObjectId() == null) throw new DataException("批准文件缺少原生来源或正式文件对象,不能回写资源"); if (!"yes".equals(item.getShifouShoukong()) && !"no".equals(item.getShifouShoukong())) throw new DataException("推送任务缺少是否受控快照,不能回写资源"); if ((item.getSourceKey().endsWith(":zhuwenjian") || item.getSourceKey().endsWith(":wailaiWenjian")) && !"yes".equals(item.getShifouShoukong())) throw new DataException("主文件推送任务的是否受控必须为yes"); model.setShifouShoukong(item.getShifouShoukong()); model.setBianhaoShiyongRenId(source.getBianhaoShiyongRenId()); model.setZhidingrenBumenId(source.getZhidingrenBumenId()); model.setShenheLiuchengId(source.getShenheLiuchengId()); model.setShenheLiuchengRenwuId(source.getShenheLiuchengRenwuId()); model.setWenjianDuixiangId(version.fileObjectId().toString()); model.setZhidingRenId(version.preparedBy()); model.setZhidingRiqi(version.preparedOn() == null ? null : java.sql.Date.valueOf(version.preparedOn())); model.setCenterDocumentId(item.getDocumentId().toString()); model.setCenterVersionId(item.getFileVersionId().toString()); model.setCenterVersionLabel(version.versionLabel()); model.setEffectiveAt(version.effectiveFrom()); model.setEffectiveTo(version.effectiveTo()); } }