package com.malk.minglei.config; import com.malk.server.aliwork.YDConf; import com.malk.server.dingtalk.DDConf; import com.malk.service.aliwork.YDClient; import com.malk.service.aliwork.impl.YDClientImpl; import com.malk.service.dingtalk.DDClient; import com.malk.service.dingtalk.impl.DDImplClient; import com.malk.service.dingtalk.impl.DDImplClient_Contacts; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import java.lang.reflect.Field; @Configuration @EnableConfigurationProperties({DDConf.class, YidaApplicationsProperties.class}) @Import({DDImplClient.class, DDImplClient_Contacts.class}) public class MjavaYidaConfiguration { @Bean("coordinationOfficeYidaClient") public YDClient coordinationOfficeYidaClient(DDClient dingTalkClient, YidaApplicationsProperties applications) { return createYidaClient(dingTalkClient, applications.getCoordinationOffice()); } @Bean("masterDataYidaClient") public YDClient masterDataYidaClient(DDClient dingTalkClient, YidaApplicationsProperties applications) { return createYidaClient(dingTalkClient, applications.getMasterData()); } /** * 为 malk 自动扫描到的默认客户端提供协调办公应用配置。 */ @Bean public YDConf yidaConfiguration(YidaApplicationsProperties applications) { return createYidaConfiguration(applications.getCoordinationOffice()); } private YDClient createYidaClient(DDClient dingTalkClient, YidaApplicationsProperties.ApplicationCredentials credentials) { YDConf yidaConfiguration = createYidaConfiguration(credentials); YDClientImpl yidaClient = new YDClientImpl(); inject(yidaClient, "ydConf", yidaConfiguration); inject(yidaClient, "ddClient", dingTalkClient); return yidaClient; } private YDConf createYidaConfiguration(YidaApplicationsProperties.ApplicationCredentials credentials) { YDConf yidaConfiguration = new YDConf(); yidaConfiguration.setAppType(credentials.getAppType()); yidaConfiguration.setSystemToken(credentials.getSystemToken()); return yidaConfiguration; } private void inject(YDClientImpl yidaClient, String fieldName, Object value) { try { Field field = YDClientImpl.class.getDeclaredField(fieldName); field.setAccessible(true); field.set(yidaClient, value); } catch (ReflectiveOperationException exception) { throw new IllegalStateException("Unable to initialize malk Yida client", exception); } } }