package jnpf.dmsService;
|
|
import jnpf.audit.sdk.annotation.AuditLog;
|
import jnpf.dmsMapper.DmsApprovedBatchMapper;
|
import jnpf.dmsMapper.DmsApprovedDisableMapper;
|
import jnpf.dmsEntity.storage.approval.DmsDisableRequest;
|
import org.springframework.beans.factory.annotation.Value;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Service;
|
import java.util.List;
|
|
@Slf4j
|
@Service
|
@EnableScheduling
|
@RequiredArgsConstructor
|
@ConditionalOnProperty(name = "dms.approved-files.effective-job.enabled", havingValue = "true", matchIfMissing = true)
|
public class DmsApprovedFileEffectiveJob {
|
private static final int DISCOVERY_PAGE_SIZE = 100;
|
private final DmsApprovedBatchMapper receipts;
|
private final DmsApprovedFileRetryService retry;
|
private final DmsApprovedDisableMapper disables;
|
private final DmsApprovedDisableService disableService;
|
@Value("${dms.approved-disable.enabled:false}") private boolean disableEnabled;
|
|
@Value("${dms.approved-files.retry-backoff-enabled:true}")
|
private boolean retryBackoffEnabled = true;
|
|
@Scheduled(cron = "${dms.approved-files.effective-job.cron:0 * * * * ?}")
|
@AuditLog(action = "DMS_APPROVED_FILES_DUE", bizCodeExpr = "''", recordSuccess = false)
|
public void activateDue() {
|
receipts.discover();
|
if (disableEnabled) {
|
discoverDisables();
|
}
|
for (jnpf.dmsEntity.storage.approval.DmsApprovedBatch receipt : receipts.retryCandidates(disableEnabled, retryBackoffEnabled)) {
|
try { retry.process(receipt); }
|
catch (RuntimeException error) {
|
log.error("批准文件本次处理失败,后续按登记进度自动重试 tenant={} batch={}", receipt.getTenantId(), receipt.getId(), error);
|
}
|
}
|
}
|
|
private void discoverDisables() {
|
DmsDisableRequest after = null;
|
while (true) {
|
List<DmsDisableRequest> page = disables.approvedApplications(after, DISCOVERY_PAGE_SIZE);
|
for (DmsDisableRequest source : page) {
|
try { disableService.enqueue(source.getTenantId(), source.getFlowId(), source.getTaskId(), source.getOperation()); }
|
catch (RuntimeException error) {
|
log.error("停用申请接收失败 tenant={} task={} application={}",
|
source.getTenantId(), source.getTaskId(), source.getApplicationId(), error);
|
}
|
}
|
if (page.size() < DISCOVERY_PAGE_SIZE) return;
|
// Advance past failures too. OFFSET would skip rows as successful enqueues leave the query.
|
after = page.get(page.size() - 1);
|
}
|
}
|
}
|