package jnpf.bizcommon.audit.service.support; import jnpf.audit.AuditConsts; import jnpf.util.JsonUtil; import org.springframework.util.StringUtils; import java.util.Locale; import java.util.Map; /** 审计事件物理合并分类;同一 operationId 每类最多一行。 */ public final class AuditEventCategories { public static final String BUSINESS = "BUSINESS"; public static final String PRIMARY_SIGN = "PRIMARY_SIGN"; public static final String REVIEW_SIGN = "REVIEW_SIGN"; private AuditEventCategories() { } public static String resolve(String eventType, String extraJson) { if (!AuditConsts.TYPE_E_SIGNATURE.equals(eventType)) { return BUSINESS; } String explicitRole = extraValue(extraJson, "signatureRole"); if ("REVIEW".equalsIgnoreCase(explicitRole)) { return REVIEW_SIGN; } String signField = extraValue(extraJson, "signField"); if (StringUtils.hasText(signField)) { String normalized = signField.toLowerCase(Locale.ROOT); if (normalized.contains("review") || normalized.contains("fuhe") || normalized.contains("复审") || normalized.contains("复核")) { return REVIEW_SIGN; } } return PRIMARY_SIGN; } private static String extraValue(String extraJson, String key) { if (!StringUtils.hasText(extraJson)) { return null; } try { Map extra = JsonUtil.stringToMap(extraJson); Object value = extra == null ? null : extra.get(key); return value == null ? null : String.valueOf(value); } catch (Throwable ignored) { return null; } } }