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<DmsWailaiWenjianXinzengShenheEntity> 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("回写外来文件审核生效版本失败");
|
}
|
}
|