代码结构如下
 

 
代码如下
 
@Getter
@AllArgsConstructor
public enum AuditPlutusEnum {
    BACK("回款"),
    REFUND("退款"),
    INVOICE("开票");
    private final String name;
}
 
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface AuditStrategyType {
    @AliasFor(annotation = Component.class)
    String value() default "";
    AuditPlutusEnum type();
}
 
 */
@Configuration
public class AuditStrategyConfig {
    @Bean
    public AuditStrategyRunner auditStrategyRunner(List<AuditPlutusStrategy> strategies) {
        Map<AuditPlutusEnum, AuditPlutusStrategy> strategyMap = strategies.stream()
                .collect(Collectors.toMap(
                        
                        s -> s.getClass().getAnnotation(AuditStrategyType.class).type(),
                        s -> s
                ));
        return (flag, auditPlutusRo) -> strategyMap.get(flag).audit(auditPlutusRo);
    }
}
 
public interface AuditStrategyRunner {
    void audit(AuditPlutusEnum type, AuditPlutusRo auditPlutusRo);
}
 
public interface AuditPlutusStrategy {
    void audit(AuditPlutusRo ro);
}
 
@AuditStrategyType(type = AuditPlutusEnum.REFUND)
public class AuditRefundStrategy implements AuditPlutusStrategy {
    @Override
    public void audit(AuditPlutusRo ro) {
        
    }
}```
```java
@AuditStrategyType(type = AuditPlutusEnum.INVOICE)
public class AuditInvoiceStrategy implements AuditPlutusStrategy {
    @Override
    public void audit(AuditPlutusRo ro) {
        
    }
}
 
@AuditStrategyType(type = AuditPlutusEnum.BACK)
public class AuditBackStrategy implements AuditPlutusStrategy {
    @Override
    public void audit(AuditPlutusRo ro) {
        
    }
}
 
调用
 
    @Autowired
    private AuditStrategyRunner auditStrategyRunner;
    public ResultData<?> auditBack(AuditPlutusRo ro) {
        log.info("【{}】审核-业财回调处理,审核编号为:{},传入参数为:{}", ro.getAuditPlutusEnum().getName(), ro.getAuditNo(), JSON.toJSONString(ro));
        auditStrategyRunner.audit(ro.getAuditPlutusEnum(), ro);
        return ResultData.SUCCESS;
    }