package jnpf.bizcommon.onlyoffice.service.impl; import jnpf.base.ActionResult; import jnpf.base.ActionResultCode; import jnpf.bizcommon.onlyoffice.entity.OnlyOfficeSessionEntity; import jnpf.eln.RecordFillApi; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.core.annotation.Order; @Slf4j @Component @Order(200) @RequiredArgsConstructor public class ElnRecordFillConfigBuilder implements OnlyOfficeSceneConfigBuilder { private final RecordFillApi recordFillApi; private final ElnRecordFillTicketIssuer ticketIssuer; @Override public String scene() { return ElnRecordFillTicketIssuer.BIZ_SCENE; } @Override public String bizModule() { return ElnRecordFillTicketIssuer.BIZ_MODULE; } @Override public OnlyOfficeSceneBuildPlan build(OnlyOfficeSceneBuildContext context) { return OnlyOfficeSceneBuildPlan.builder() .editAdmission(() -> canFill(context)) .allowSameUserLockReopen(true) .hideCommentsWhenWritable(true) .pluginContextCustomizer((pluginCode, pluginGuid, pluginContext, writable) -> { if (!ElnRecordFillTicketIssuer.PLUGIN_CODE.equals(pluginCode)) { return; } pluginContext.put("canFill", writable); pluginContext.put("scope", ElnRecordFillTicketIssuer.SCOPE); pluginContext.put("ticket", ticketIssuer.issue( context.getParam(), context.getUser(), pluginGuid)); }) .build(); } @Override public boolean acceptsFencedStatus(Integer status) { return Integer.valueOf(OnlyOfficeSessionEntity.SessionStatus.RECORD_RETIRING).equals(status) || Integer.valueOf(OnlyOfficeSessionEntity.SessionStatus.RECORD_HISTORICAL).equals(status); } private boolean canFill(OnlyOfficeSceneBuildContext context) { try { ActionResult result = recordFillApi.canFill( context.getTenantId(), context.getUser() == null ? null : context.getUser().getUserId(), context.getSession().getBizDataId(), context.getSession().getFileId()); return result != null && ActionResultCode.SUCCESS.getCode().equals(result.getCode()) && Boolean.TRUE.equals(result.getData()); } catch (RuntimeException e) { log.warn("ELN 记录填写准入探针调用失败,record={} file={}", context.getSession().getBizDataId(), context.getSession().getFileId()); return false; } } }