package jnpf.dmsService; import jnpf.audit.sdk.annotation.AuditLog; import jnpf.dmsEntity.DmsWailaiWenjianXinzengShenheEntity; import jnpf.dmsEntity.DmsWenjianBanbenEntity; import jnpf.dmsEntity.banben.DmsWenjianBanbenJiesuanModel; import jnpf.dmsEntity.storage.approval.DmsApprovedBatch; import jnpf.dmsMapper.DmsWailaiWenjianXinzengShenheMapper; import jnpf.exception.DataException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; @Service @RequiredArgsConstructor public class DmsExternalApprovedSettlementService { private final DmsWailaiWenjianXinzengShenheMapper audits; private final DmsApprovedFileProjection projection; private final DmsWenjianYewuBanbenService versions; @AuditLog(action = "DMS_APPLY_EXTERNAL_NEW_AUDIT", bizCodeExpr = "#batch.auditId", recordSuccess = false) @Transactional(propagation = Propagation.MANDATORY, rollbackFor = Exception.class) public void apply(DmsApprovedBatch batch) { List rows = audits.selectByFlowForUpdate( batch.getTenantId(), batch.getFlowId(), batch.getTaskId()); if (rows == null || rows.size() != 1 || !Integer.valueOf(2).equals(rows.get(0).getFlowState())) throw new DataException("未找到唯一已通过的外来文件审核单"); DmsWailaiWenjianXinzengShenheEntity audit = rows.get(0); if (!Objects.equals(batch.getAuditId(), audit.getId())) throw new DataException("外来文件审核单与登记批次不一致"); if (audit.getShengxiaoWenjianBanbenId() != null || audit.getWenjianId() != null) throw new DataException("外来文件审核单已回写其他业务资源"); DmsWenjianBanbenJiesuanModel model = new DmsWenjianBanbenJiesuanModel(); model.setTenantId(batch.getTenantId()); model.setUserId(batch.getActorId()); model.setWenjianLeixing(DmsWenjianYewuBanbenService.EXTERNAL_FILE); model.setLaiyuanDanjuLeixing("wailai_wenjian_xinzeng_shenhe"); model.setLaiyuanDanjuId(audit.getId()); model.setLaiyuanYewuJian("wailai_wenjian_xinzeng_shenhe:" + audit.getId() + ":wailaiWenjian"); model.setWenjianBianhao(audit.getWailaiWenjianBianhao()); model.setWenjianMingcheng(audit.getWenjianMingcheng()); model.setWenjianMuluId(audit.getWenjianMuluId()); model.setGuishuBumenId(audit.getBumenId()); model.setWenjianNeirong(audit.getBizFiles()); model.setWenjianFenlei(null); projection.enrich(model); if (!Objects.equals(audit.getBanbenhao(), model.getCenterVersionLabel())) throw new DataException("外来文件标准版本与中心正式版本不一致"); DmsWenjianBanbenEntity version = versions.createInitialVersion(model); audit.setWenjianId(version.getWenjianId()); audit.setShengxiaoWenjianBanbenId(version.getId()); audit.setBanbenShengxiaoShijian(version.getShengxiaoShijian()); if (audits.updateEffectiveVersion(audit) != 1) throw new DataException("回写外来文件审核生效版本失败"); } }