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 response = files.disable(form); if (response == null || !Integer.valueOf(200).equals(response.getCode())) throw new DataException(response == null ? "文件失效未返回执行结果" : response.getMsg()); } }