1、功能場景
? ? ? ? 對接多個外部廠商,比如多個銀行的賬單獲取,需要根據銀行信息執行對應的實現類。
2、功能代碼
(1)YAML配置來源列表
bank-source: bank_001, bank_002, bank_003
(2)外部來源枚舉
public interface BankPlatformEnum {/*** 銀行平臺類型*/enum BankPlatformType implements BankPlatformEnum {BANK_001("bank_001", "001銀行平臺", "bank001Service"),BANK_002("bank_002", "002銀行平臺", "bank002Service"),BANK_003("bank_003", "003銀行平臺", "bank003Service");/*** 銀行平臺編碼*/String code;/*** 銀行平臺名稱*/String name;/*** 銀行平臺的實現類名稱*/String serviceName;BankPlatformType(String code, String name, String serviceName) {this.code = code;this.name = name;this.serviceName = serviceName;}public String getCode() {return code;}public String getName() {return name;}public String getServiceName() {return serviceName;}public static BankPlatformType getByCode(String code){for (BankPlatformType value : values()) {if (value.getCode().equals(code)) {return value;}}return null;}}}
(3)統一銀行業務接口
public interface IBankService {EcsServiceMsg getBillList(BankQO bankQO);}
(4)統一銀行業務代理實現類
@Service
@Slf4j
public class BankServiceProxy implements IBankService {@Value("${bank-source: defaultBankSource}")private List<String> bankSourceList;/*** 歸集第三方發票(可以配置多個第三方廠商,依次遍歷歸集動作)*/@Overridepublic Object getBillList(BankQO bankQO) {for(String sourceCode:bankSourceList){// 根據名稱獲得實例類型try {String serviceName = EcsSyncCollectEnum.BillSourceType.getBySourceCode(sourceCode).getServiceName();AbstractBankService bankService = SpringUtil.getBean(serviceName);bankService.getBillList(bankQO);}catch(Exception e){log.error("發生異常: {}", sourceCode, e);}}return "銀行業務執行中,請于5-10分鐘后確認執行結果";}
}