package com.ruoyi.jarvis.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; /** * 腾讯文档开放平台配置 * * @author system */ @Configuration @Component @ConfigurationProperties(prefix = "tencent.doc") public class TencentDocConfig { private static final Logger log = LoggerFactory.getLogger(TencentDocConfig.class); /** 应用ID */ private String appId; /** 应用密钥 */ private String appSecret; /** 授权回调地址 */ private String redirectUri; /** API基础地址 - V3版本(实际路径:/openapi/spreadsheet/v3) */ private String apiBaseUrl = "https://docs.qq.com/openapi/spreadsheet/v3"; /** OAuth授权地址 */ private String oauthUrl = "https://docs.qq.com/oauth/v2/authorize"; /** 获取Token地址 */ private String tokenUrl = "https://docs.qq.com/oauth/v2/token"; /** 刷新Token地址 */ private String refreshTokenUrl = "https://docs.qq.com/oauth/v2/token"; /** 访问令牌(用于自动写入H-TF订单到腾讯文档) */ private String accessToken; /** 文件ID(H-TF订单的目标文档ID) */ private String fileId; /** 工作表ID(H-TF订单的目标工作表ID) */ private String sheetId; /** 表头行号(表头所在的行,默认为2) */ private Integer headerRow = 2; /** 起始行号(数据开始的行,从第几行开始搜索匹配单号,默认为3) */ private Integer startRow = 3; /** * 配置初始化后验证 */ @PostConstruct public void init() { log.info("腾讯文档配置加载 - appId: {}, redirectUri: {}, apiBaseUrl: {}", appId != null && appId.length() > 10 ? appId.substring(0, 10) + "..." : (appId != null ? appId : "null"), redirectUri != null ? redirectUri : "null", apiBaseUrl); if (appId == null || appId.trim().isEmpty()) { log.warn("腾讯文档应用ID未配置!请检查application-dev.yml中的tencent.doc.app-id"); } if (appSecret == null || appSecret.trim().isEmpty()) { log.warn("腾讯文档应用密钥未配置!请检查application-dev.yml中的tencent.doc.app-secret"); } if (redirectUri == null || redirectUri.trim().isEmpty()) { log.warn("腾讯文档回调地址未配置!请检查application-dev.yml中的tencent.doc.redirect-uri"); } } public String getAppId() { return appId; } public void setAppId(String appId) { this.appId = appId; } public String getAppSecret() { return appSecret; } public void setAppSecret(String appSecret) { this.appSecret = appSecret; } public String getRedirectUri() { return redirectUri; } public void setRedirectUri(String redirectUri) { this.redirectUri = redirectUri; } public String getApiBaseUrl() { return apiBaseUrl; } public void setApiBaseUrl(String apiBaseUrl) { this.apiBaseUrl = apiBaseUrl; } public String getOauthUrl() { return oauthUrl; } public void setOauthUrl(String oauthUrl) { this.oauthUrl = oauthUrl; } public String getTokenUrl() { return tokenUrl; } public void setTokenUrl(String tokenUrl) { this.tokenUrl = tokenUrl; } public String getRefreshTokenUrl() { return refreshTokenUrl; } public void setRefreshTokenUrl(String refreshTokenUrl) { this.refreshTokenUrl = refreshTokenUrl; } public String getAccessToken() { return accessToken; } public void setAccessToken(String accessToken) { this.accessToken = accessToken; } public String getFileId() { return fileId; } public void setFileId(String fileId) { this.fileId = fileId; } public String getSheetId() { return sheetId; } public void setSheetId(String sheetId) { this.sheetId = sheetId; } public Integer getHeaderRow() { return headerRow; } public void setHeaderRow(Integer headerRow) { this.headerRow = headerRow; } public Integer getStartRow() { return startRow; } public void setStartRow(Integer startRow) { this.startRow = startRow; } }