監査ログ(监查log)

  1. 表结构:audit_log_record_v4
  2. 一个机能,写一个共通方法。

工作流

配置文件

auditLogConfiguration.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<config>
	<item>
		<logOutputMethod>DB</logOutputMethod>
		<logFileDestination>${java.io.tmpdir}</logFileDestination>
	</item>
</config>

代码

方案一:共通 - 适用于变更项目无需对比或没有的情况

final Supplier> supplier = getJoinedDetail(getFixed(coordination), getStatusLog(StatusType.REQUEST, StatusType.APPROVAL)); 
excuteAuditLog(supplier, educom.c4v4.service.observation.FunctionType.OBSERVATION_COOPERATION_POST_APPROVAL, AuditLogOperation.APPROVAL);

Pasted image 20231214124718.png

方案二:共通 - 适用于变更项目需要对比的情况

Pasted image 20231214125012.png

如果监察日志与共通式样有不同的地方

注意

  1. 下面这个写法错误。ofAuditLogBuilder 时,记录了操作开始时间。logRecord 时,记录了结束时间,2 个方法写在一起,那么时间就一样了。
protected void excuteAuditLog(final Supplier<List<? extends CharSequence>> detail, final FunctionType functionType, final AuditLogOperation operation) {  
    final AuditLogBuilder builder = ofAuditLogBuilder(functionType, operation).studentInformation(false);  
    auditLoggingService.logRecord(builder.details(detail).result(true).operationEndTime());  
}
  1. 应该使用下面的写法(参照 AbstractAuditLogAlertService)。接口开始执行时,调用 auditLogBegin。接口执行完成后,调用 auditLogEnd。
/**  
 * 操作開始時に呼び出す  
 */  
protected AuditLogBuilder auditLogBegin(final FunctionType functionType, final AuditLogOperation operation, final EducationCenter center) {  
    final AuditLogBuilderExtraParams extraParams = new AuditLogBuilderExtraParams();  
    extraParams.setSystemManage(true);  
    extraParams.setSchoolId(center.getSchoolId());  
    return ofAuditLogBuilder(functionType, operation).studentInformation(false).customParameters(extraParams);  
}

/**  
 * 処理終了時に呼び出す  
 */  
protected void auditLogEnd(final AuditLogBuilder builder, final Supplier<List<? extends CharSequence>> detail) {  
    auditLoggingService.logRecord(builder.details(detail).result(true).operationEndTime());  
}