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<Boolean> 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;
|
}
|
}
|
}
|