package jnpf.dmsService;
|
|
import jnpf.dmsEntity.center.DmsCenterDisableCommand;
|
import jnpf.base.ActionResult;
|
import jnpf.dmsEntity.storage.approval.DmsApprovedBatch;
|
import jnpf.dmsEntity.storage.approval.DmsDisableRequest;
|
import jnpf.dmsMapper.DmsApprovedDisableMapper;
|
import jnpf.exception.DataException;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
/** Processes due items using the shared batch lease; owns no retry queue or scheduler. */
|
@Service
|
@RequiredArgsConstructor
|
public class DmsApprovedDisableProcessor {
|
private final DmsApprovedDisableMapper mapper;
|
private final DmsApprovedDisableService service;
|
private final DmsApprovedDisableClient files;
|
@Value("${dms.approved-disable.enabled:false}") private boolean enabled;
|
|
public static boolean supports(String auditType) {
|
return "chexiao_shenqing".equals(auditType) || "shixiao_shenqing".equals(auditType);
|
}
|
|
public boolean isEnabled() { return enabled; }
|
|
public void process(DmsApprovedBatch batch) {
|
if (!enabled || !supports(batch.getAuditType()) || batch.getLeaseToken() == null)
|
throw new DataException("停用处理未启用或统一任务租约缺失");
|
RuntimeException failure = null;
|
for (DmsDisableRequest row : mapper.dueItems(batch.getTenantId(), batch.getId())) {
|
try { processItem(batch, row); }
|
catch (RuntimeException error) {
|
if (failure == null) failure = error;
|
else failure.addSuppressed(error);
|
}
|
}
|
// A completed row must not be replayed because a different row failed or is future-dated.
|
try { service.refreshProgress(batch); }
|
catch (RuntimeException error) {
|
if (failure == null) failure = error;
|
else failure.addSuppressed(error);
|
}
|
if (failure != null) throw failure;
|
}
|
|
private void processItem(DmsApprovedBatch batch, DmsDisableRequest row) {
|
DmsCenterDisableCommand form = new DmsCenterDisableCommand();
|
form.setTenantId(batch.getTenantId()); form.setRequestId(row.getId());
|
form.setMainDocumentId(row.getDocumentId()); form.setExpectedMainVersionId(row.getFileVersionId());
|
form.setReason(row.getOperation()); form.setActorId(row.getActorId()); form.setEffectiveAt(row.getScheduledAt());
|
form.setLeaseToken(batch.getLeaseToken());
|
ActionResult<Void> response = files.disable(form);
|
if (response == null || !Integer.valueOf(200).equals(response.getCode()))
|
throw new DataException(response == null ? "文件失效未返回执行结果" : response.getMsg());
|
}
|
}
|