package com.qmth.ops.biz.service; import com.qmth.boot.core.ai.model.doc.ParseDocTask; import com.qmth.boot.core.ai.model.doc.ParseDocTaskResult; import com.qmth.ops.biz.ai.client.DocApiClient; import com.qmth.ops.biz.ai.client.DocApiConfig; import com.qmth.ops.biz.ai.exception.DocClientNotFound; import com.qmth.ops.biz.domain.OcrSupplier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class DocClientService { private static final Logger log = LoggerFactory.getLogger(DocClientService.class); private DocApiClient defaultClient; private Map clientMap; @Resource private OcrSupplierService ocrSupplierService; @PostConstruct public synchronized void init() { defaultClient = null; clientMap = new HashMap<>(); List list = ocrSupplierService.list(); for (OcrSupplier supplier : list) { initApiClient(supplier); } } private void initApiClient(OcrSupplier supplier) { try { String className = DocApiClient.class.getName().replace(DocApiClient.class.getSimpleName(), supplier.getClientClass()); DocApiConfig config = new DocApiConfig(supplier); Class clientClass = Class.forName(className); Object clientInstance = clientClass.getConstructor(DocApiConfig.class).newInstance(config); if (clientInstance instanceof DocApiClient) { DocApiClient client = (DocApiClient) clientInstance; clientMap.put(supplier.getId(), client); // 取第一个enable=true的为默认客户端 if (supplier.getEnable() && defaultClient == null) { defaultClient = client; } } } catch (Exception e) { log.warn("DocApiClient init error, supplier:{} class:{}", supplier.getName(), supplier.getClientClass()); } } public ParseDocTask parseDocTask(byte[] fileData, String fileName) throws Exception { if (defaultClient == null) { throw new DocClientNotFound(); } return defaultClient.parseDocTask(fileData, fileName); } public ParseDocTaskResult parseDocTaskQuery(String taskId) throws Exception { if (defaultClient == null) { throw new DocClientNotFound(); } return defaultClient.parseDocTaskQuery(taskId); } }