package com.ruoyi.task.api.spi; /** * 参数配置读取能力 —— ruoyi-task 的对外 SPI,由 smartor 侧实现。 * *

用途

* 子任务统计里要读 {@code sys_config} 的 {@code wj.sms.template} 取值 * (原 {@code ServiceSubtaskServiceImpl} L5141-5146): *
 * SysConfig sysConfig = new SysConfig();
 * sysConfig = sysConfigMapper.checkConfigKeyUnique("wj.sms.template");
 * if (!Objects.isNull(sysConfig)) { String smsContemt = sysConfig.getConfigValue(); ... }
 * 
* {@code sys_config} 属系统域。ruoyi-task 自己的模块开关读参数走 * {@code ruoyi-common} 的 {@code IConfigService};但这里原本走的是 * {@code SysConfigMapper#checkConfigKeyUnique}(返回整行), * 且只用到 {@code configValue} 一个字段,故收成一个只返回值的端口。 * *

⚠️ 关于"行存在但值为 null"的边界

* 原判定是"行存在"({@code !isNull(sysConfig)}),本端口判定是"值非 null"。 * 二者只在 {@code sys_config} 存在一行且 {@code config_value IS NULL} 时不同 —— * 而 RuoYi 的 {@code sys_config.config_value} 是 {@code varchar(500) NOT NULL DEFAULT ''}, * 该情形不可能出现,因此行为等价。 * (实现方按原样调 {@code checkConfigKeyUnique} 后取 {@code getConfigValue()}。) * *

⚠️ 实现必须保持"纯转发"

*/ public interface TaskSysConfigPort { /** * 按参数键名取参数值(原 {@code SysConfigMapper#checkConfigKeyUnique} + {@code getConfigValue()})。 * * @param configKey 参数键名 * @return 参数值;该键不存在时返回 {@code null} */ String findConfigValueByKey(String configKey); /** * 按参数键名取参数值(原 {@code ISysConfigService#selectConfigByKey(String)})。 *

* ⚠️ 与 {@link #findConfigValueByKey} 不是同一个东西,不要合并: * 前者走的是 {@code SysConfigMapper#checkConfigKeyUnique}(按 key 查整行), * 本方法走的是 {@code ISysConfigService#selectConfigByKey}(带缓存、且支持 orgid 维度)。 * 两者 SQL 不同,合并会改变取值来源 —— 故并列保留、各自对应原调用。 * * @param configKey 参数键名 * @return 参数值;不存在返回 {@code StringUtils.EMPTY}(与原实现一致,不是 null) */ String selectConfigValue(String configKey); /** * 按参数键名 + 机构 id 取参数值(原 {@code ISysConfigService#selectConfigByKey(String, String)})。 *

* ⚠️ 该 2 参重载只在 ruoyi-system 的 {@code ISysConfigService} 上, * 不在 ruoyi-common 的 {@code IConfigService} 上 —— 这也是为什么不能简单地把 * 调用方字段类型换成 {@code IConfigService} 来省掉依赖。 * * @param configKey 参数键名 * @param orgid 机构 id * @return 参数值;不存在返回空串 */ String selectConfigValue(String configKey, String orgid); }