DocClientService.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package com.qmth.ops.biz.service;
  2. import com.qmth.boot.core.ai.model.doc.ParseDocTask;
  3. import com.qmth.boot.core.ai.model.doc.ParseDocTaskResult;
  4. import com.qmth.ops.biz.ai.client.DocApiClient;
  5. import com.qmth.ops.biz.ai.client.DocApiConfig;
  6. import com.qmth.ops.biz.ai.exception.DocClientNotFound;
  7. import com.qmth.ops.biz.domain.OcrSupplier;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.stereotype.Service;
  11. import javax.annotation.PostConstruct;
  12. import javax.annotation.Resource;
  13. import java.util.HashMap;
  14. import java.util.List;
  15. import java.util.Map;
  16. @Service
  17. public class DocClientService {
  18. private static final Logger log = LoggerFactory.getLogger(DocClientService.class);
  19. private DocApiClient defaultClient;
  20. private Map<Long, DocApiClient> clientMap;
  21. @Resource
  22. private OcrSupplierService ocrSupplierService;
  23. @PostConstruct
  24. public synchronized void init() {
  25. defaultClient = null;
  26. clientMap = new HashMap<>();
  27. List<OcrSupplier> list = ocrSupplierService.list();
  28. for (OcrSupplier supplier : list) {
  29. initApiClient(supplier);
  30. }
  31. }
  32. private void initApiClient(OcrSupplier supplier) {
  33. try {
  34. String className = DocApiClient.class.getName().replace(DocApiClient.class.getSimpleName(), supplier.getClientClass());
  35. DocApiConfig config = new DocApiConfig(supplier);
  36. Class<?> clientClass = Class.forName(className);
  37. Object clientInstance = clientClass.getConstructor(DocApiConfig.class).newInstance(config);
  38. if (clientInstance instanceof DocApiClient) {
  39. DocApiClient client = (DocApiClient) clientInstance;
  40. clientMap.put(supplier.getId(), client);
  41. // 取第一个enable=true的为默认客户端
  42. if (supplier.getEnable() && defaultClient == null) {
  43. defaultClient = client;
  44. }
  45. }
  46. } catch (Exception e) {
  47. log.warn("DocApiClient init error, supplier:{} class:{}", supplier.getName(), supplier.getClientClass());
  48. }
  49. }
  50. public ParseDocTask parseDocTask(byte[] fileData, String fileName) throws Exception {
  51. if (defaultClient == null) {
  52. throw new DocClientNotFound();
  53. }
  54. return defaultClient.parseDocTask(fileData, fileName);
  55. }
  56. public ParseDocTaskResult parseDocTaskQuery(String taskId) throws Exception {
  57. if (defaultClient == null) {
  58. throw new DocClientNotFound();
  59. }
  60. return defaultClient.parseDocTaskQuery(taskId);
  61. }
  62. }