MjavaYidaConfiguration.java 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.malk.minglei.config;
  2. import com.malk.server.aliwork.YDConf;
  3. import com.malk.server.dingtalk.DDConf;
  4. import com.malk.service.aliwork.YDClient;
  5. import com.malk.service.aliwork.impl.YDClientImpl;
  6. import com.malk.service.dingtalk.DDClient;
  7. import com.malk.service.dingtalk.impl.DDImplClient;
  8. import com.malk.service.dingtalk.impl.DDImplClient_Contacts;
  9. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  10. import org.springframework.context.annotation.Bean;
  11. import org.springframework.context.annotation.Configuration;
  12. import org.springframework.context.annotation.Import;
  13. import java.lang.reflect.Field;
  14. @Configuration
  15. @EnableConfigurationProperties({DDConf.class, YidaApplicationsProperties.class})
  16. @Import({DDImplClient.class, DDImplClient_Contacts.class})
  17. public class MjavaYidaConfiguration {
  18. @Bean("coordinationOfficeYidaClient")
  19. public YDClient coordinationOfficeYidaClient(DDClient dingTalkClient, YidaApplicationsProperties applications) {
  20. return createYidaClient(dingTalkClient, applications.getCoordinationOffice());
  21. }
  22. @Bean("masterDataYidaClient")
  23. public YDClient masterDataYidaClient(DDClient dingTalkClient, YidaApplicationsProperties applications) {
  24. return createYidaClient(dingTalkClient, applications.getMasterData());
  25. }
  26. /**
  27. * 为 malk 自动扫描到的默认客户端提供协调办公应用配置。
  28. */
  29. @Bean
  30. public YDConf yidaConfiguration(YidaApplicationsProperties applications) {
  31. return createYidaConfiguration(applications.getCoordinationOffice());
  32. }
  33. private YDClient createYidaClient(DDClient dingTalkClient, YidaApplicationsProperties.ApplicationCredentials credentials) {
  34. YDConf yidaConfiguration = createYidaConfiguration(credentials);
  35. YDClientImpl yidaClient = new YDClientImpl();
  36. inject(yidaClient, "ydConf", yidaConfiguration);
  37. inject(yidaClient, "ddClient", dingTalkClient);
  38. return yidaClient;
  39. }
  40. private YDConf createYidaConfiguration(YidaApplicationsProperties.ApplicationCredentials credentials) {
  41. YDConf yidaConfiguration = new YDConf();
  42. yidaConfiguration.setAppType(credentials.getAppType());
  43. yidaConfiguration.setSystemToken(credentials.getSystemToken());
  44. return yidaConfiguration;
  45. }
  46. private void inject(YDClientImpl yidaClient, String fieldName, Object value) {
  47. try {
  48. Field field = YDClientImpl.class.getDeclaredField(fieldName);
  49. field.setAccessible(true);
  50. field.set(yidaClient, value);
  51. } catch (ReflectiveOperationException exception) {
  52. throw new IllegalStateException("Unable to initialize malk Yida client", exception);
  53. }
  54. }
  55. }