通用服务接口
core 模块定义了一系列通用服务接口,为系统各模块提供统一的数据访问和业务处理规范。这些接口采用依赖注入的方式,实现了模块间的松耦合设计。
设计理念
接口优先原则
所有业务逻辑都通过接口定义,具体实现由各业务模块提供,确保了:
- 模块解耦:core 模块不依赖具体实现
- 灵活扩展:可以轻松替换不同的实现方式
- 统一规范:所有模块遵循相同的接口契约
默认方法支持
接口中大量使用 Java 8+ 的默认方法特性,提供:
- 向后兼容:新增方法不会破坏现有实现
- 便捷重载:提供多种参数形式的便捷方法
- 降级处理:为可选功能提供默认实现
核心服务接口
用户服务 (UserService)
用户相关的数据查询和管理服务。
基础查询方法
java
/**
* 通过用户ID查询用户账户
*/
String getUserNameById(Long userId);
/**
* 通过用户ID查询用户昵称
*/
String getNickNameById(Long userId);
/**
* 通过用户ID查询用户头像
*/
String getAvatarById(Long userId);
批量查询方法
java
/**
* 通过用户ID列表查询用户昵称列表
* @param userIds 用户ID,多个用逗号隔开
* @return 用户昵称,多个用逗号隔开
*/
String getNickNamesByIds(String userIds);
/**
* 通过用户ID查询用户列表
*/
List<UserDTO> listUsersByIds(List<Long> userIds);
关联查询方法
java
/**
* 通过角色ID查询用户
*/
List<UserDTO> listUsersByRoleIds(List<Long> roleIds);
/**
* 通过部门ID查询用户
*/
List<UserDTO> listUsersByDeptIds(List<Long> deptIds);
/**
* 通过岗位ID查询用户
*/
List<UserDTO> listUsersByPostIds(List<Long> postIds);
映射关系方法
java
/**
* 根据用户ID列表查询用户名称映射关系
* @return Map,key为用户ID,value为对应的用户名称
*/
Map<Long, String> mapUserNames(List<Long> userIds);
/**
* 根据角色ID列表查询角色名称映射关系
*/
Map<Long, String> mapRoleNames(List<Long> roleIds);
使用示例
java
@Service
public class BusinessService {
@Autowired
private UserService userService;
public void processUserData() {
// 单个查询
String userName = userService.getUserNameById(1L);
// 批量查询
List<Long> userIds = Arrays.asList(1L, 2L, 3L);
List<UserDTO> users = userService.listUsersByIds(userIds);
// 映射关系
Map<Long, String> userNameMap = userService.mapUserNames(userIds);
// 关联查询
List<UserDTO> deptUsers = userService.listUsersByDeptIds(Arrays.asList(1L, 2L));
}
}
字典服务 (DictService)
系统字典数据的查询和转换服务。
核心转换方法
java
/**
* 根据字典类型和字典值获取字典标签
* @param dictType 字典类型,如 "sys_user_sex"
* @param dictValue 字典值,如 "1"
* @return 字典标签,如 "男"
*/
String getDictLabel(String dictType, String dictValue);
/**
* 根据字典类型和字典标签获取字典值(反向查询)
* @param dictType 字典类型
* @param dictLabel 字典标签,如 "男"
* @return 字典值,如 "1"
*/
String getDictValue(String dictType, String dictLabel);
批量转换方法
java
/**
* 支持多值转换,使用指定分隔符
* @param dictType 字典类型
* @param dictValue 字典值,支持多个值用分隔符分割,如 "1,2"
* @param separator 分隔符,默认为逗号
* @return 字典标签,如 "男,女"
*/
String getDictLabel(String dictType, String dictValue, String separator);
数据获取方法
java
/**
* 获取字典下所有的字典值与标签映射
* @param dictType 字典类型
* @return Map,key为字典值,value为字典标签
*/
Map<String, String> getAllDictByDictType(String dictType);
/**
* 根据字典类型查询字典数据列表
*/
List<DictDataDTO> getDictData(String dictType);
/**
* 根据字典类型查询详细信息
*/
DictTypeDTO getDictType(String dictType);
使用示例
java
@Service
public class UserBusinessService {
@Autowired
private DictService dictService;
public void processUserData() {
// 单值转换
String genderLabel = dictService.getDictLabel("sys_user_sex", "1");
// 结果: "男"
// 多值转换
String statusLabels = dictService.getDictLabel("sys_user_status", "1,2", ",");
// 结果: "正常,停用"
// 反向查询
String genderValue = dictService.getDictValue("sys_user_sex", "男");
// 结果: "1"
// 获取所有字典项
Map<String, String> genderDict = dictService.getAllDictByDictType("sys_user_sex");
// 结果: {"0": "女", "1": "男", "2": "未知"}
}
}
常用字典类型
java
// 系统基础字典
sys_user_sex // 用户性别
sys_enable_status // 启用状态
sys_user_status // 用户状态
sys_boolean_flag // 逻辑标志
// 业务字典
sys_payment_method // 支付方式
sys_order_status // 订单状态
sys_message_type // 消息类型
sys_notice_type // 通知类型
部门服务 (DeptService)
部门组织架构的查询服务。
java
public interface DeptService {
/**
* 通过部门ID查询部门名称
* @param deptIds 部门ID串,逗号分隔
* @return 部门名称串,逗号分隔
*/
String getDeptNameByIds(String deptIds);
/**
* 根据部门ID查询部门负责人
* @param deptId 部门ID
* @return 负责人用户ID
*/
Long getDeptLeaderById(Long deptId);
/**
* 查询所有正常状态的部门
* @return 部门列表
*/
List<DeptDTO> listNormalDepts();
}
配置服务 (ConfigService)
系统参数配置的查询服务。
基础配置查询
java
/**
* 根据参数key获取参数值
* @param configKey 参数key,如 "sys.account.registerUser"
* @return 参数值
*/
String getConfigValue(String configKey);
默认值支持
java
/**
* 根据参数key获取参数值,支持默认值
* @param configKey 参数key
* @param defaultValue 默认值
* @return 参数值,如果为空则返回默认值
*/
default String getConfigValue(String configKey, String defaultValue) {
String value = getConfigValue(configKey);
return StringUtils.isNotBlank(value) ? value : defaultValue;
}
类型转换方法
java
/**
* 根据参数key获取布尔参数值
* @param configKey 参数key
* @return 布尔参数值
*/
default boolean getBooleanValue(String configKey) {
return BooleanUtil.toBoolean(getConfigValue(configKey));
}
/**
* 根据参数key获取布尔参数值,支持默认值
*/
default boolean getBooleanValue(String configKey, boolean defaultValue) {
String value = getConfigValue(configKey);
return StringUtils.isNotBlank(value) ? BooleanUtil.toBoolean(value) : defaultValue;
}
使用示例
java
@Service
public class SystemConfigService {
@Autowired
private ConfigService configService;
public void checkSystemConfig() {
// 基础查询
String siteName = configService.getConfigValue("sys.index.skinName");
// 带默认值查询
String uploadPath = configService.getConfigValue("sys.uploadPath", "/upload");
// 布尔值查询
boolean registerEnabled = configService.getBooleanValue("sys.account.registerUser");
// 布尔值带默认值查询
boolean captchaEnabled = configService.getBooleanValue("sys.account.captchaEnabled", true);
}
}
常用配置项
java
// 系统基础配置
sys.index.skinName // 系统皮肤
sys.account.registerUser // 是否允许注册
sys.account.captchaEnabled // 是否启用验证码
sys.uploadPath // 上传路径
// 安全配置
sys.user.initPassword // 用户初始密码
sys.account.maxRetryCount // 最大重试次数
sys.account.lockTime // 锁定时间(分钟)
权限服务 (PermissionService)
用户权限信息的查询服务。
java
public interface PermissionService {
/**
* 获取角色数据权限列表
* @param userId 用户id
* @return 角色权限信息
*/
Set<String> listRolePermissions(Long userId);
/**
* 获取菜单数据权限列表
* @param userId 用户id
* @return 菜单权限信息
*/
Set<String> listMenuPermissions(Long userId);
}
文件存储服务 (OssService)
对象存储服务的查询接口。
java
public interface OssService {
/**
* 通过ossId查询对应的url
* @param ossIds ossId串,逗号分隔
* @return url串,逗号分隔
*/
String getUrlsByIds(String ossIds);
/**
* 通过ossId查询列表
* @param ossIds ossId串,逗号分隔
* @return OSS对象列表
*/
List<OssDTO> listOssByIds(String ossIds);
/**
* 根据目录id查询目录名称
* @param directoryId 目录id
* @return 目录名称
*/
String getDirectoryNameById(Long directoryId);
}
支付与平台服务
支付服务 (PaymentService)
支付配置的查询和管理服务。
核心查询方法
java
/**
* 根据商户号获取支付配置
* @param mchId 商户号
* @return 支付配置,如果不存在返回null
*/
PaymentDTO getByMchId(String mchId);
/**
* 根据支付配置ID获取支付配置
* @param paymentId 支付配置ID
* @return 支付配置,如果不存在返回null
*/
PaymentDTO getById(Long paymentId);
分类查询方法
java
/**
* 根据支付类型获取支付配置列表
* @param type 支付类型(如:WECHAT, ALIPAY等)
* @param tenantId 租户id
* @return 支付配置列表
*/
List<PaymentDTO> listPaymentByType(String type, String tenantId);
验证方法
java
/**
* 检查商户号是否存在且有效
* @param mchId 商户号
* @return true-存在且有效,false-不存在或无效
*/
boolean existsValidMchId(String mchId);
/**
* 获取支付配置总数
* @return 支付配置总数
*/
long countPayments();
使用示例
java
@Service
public class PaymentBusinessService {
@Autowired
private PaymentService paymentService;
public void processPayment(String mchId) {
// 根据商户号查询配置
PaymentDTO payment = paymentService.getByMchId(mchId);
if (payment != null && payment.isEnabled()) {
// 处理支付逻辑
if (payment.isWechatPayment()) {
// 微信支付处理
} else if (payment.isAlipayPayment()) {
// 支付宝支付处理
}
}
// 查询租户下的微信支付配置
List<PaymentDTO> wechatPayments = paymentService.listPaymentByType("WECHAT", "000000");
// 验证商户号
boolean isValid = paymentService.existsValidMchId(mchId);
}
}
支付类型说明
java
// 主要支付类型
WECHAT // 微信支付
ALIPAY // 支付宝支付
UNIONPAY // 银联支付
BALANCE // 余额支付
平台服务 (PlatformService)
多平台应用配置的管理服务。
java
public interface PlatformService {
/**
* 根据平台类型获取平台配置列表
* @param type 平台类型(如:mp-weixin, mp-alipay)
* @param tenantId 租户id
* @return 平台配置列表
*/
default List<PlatformDTO> listPlatformsByType(String type, String tenantId) {
return Collections.emptyList();
}
/**
* 根据appid和平台类型获取平台配置
* @param appid 应用ID
* @param type 平台类型
* @return 平台配置
*/
default PlatformDTO getPlatformByAppidAndType(String appid, String type) {
return null;
}
/**
* 根据appid获取平台配置(跨租户查询)
* @param appid 应用ID
* @param tenantId 租户id
* @return 平台配置
*/
default PlatformDTO getPlatformByAppid(String appid, String tenantId) {
return null;
}
}
租户服务 (TenantService)
多租户环境下的租户信息服务。
java
public interface TenantService {
/**
* 获取当前租户id
* @return 租户id
*/
String getTenantId();
/**
* 根据请求获取租户ID
* 专门处理从请求中提取租户信息的逻辑:域名识别 + 请求头获取
* @return 租户ID,如果获取不到返回null
*/
String getTenantIdByRequest();
}
其他服务接口
角色服务 (RoleService)
java
public interface RoleService {
// 当前为空接口,预留扩展
}
岗位服务 (PostService)
java
public interface PostService {
// 当前为空接口,预留扩展
}
OSS配置服务 (OssConfigService)
java
public interface OssConfigService {
/**
* 初始化OSS配置
*/
void initOssConfig();
}
使用指南
1. 依赖注入使用
java
@Service
@RequiredArgsConstructor
public class BusinessService {
private final UserService userService;
private final DictService dictService;
private final ConfigService configService;
// 业务逻辑实现
}
2. 条件注入
java
@Service
@RequiredArgsConstructor
@ConditionalOnBean(PaymentService.class)
public class PaymentBusinessService {
private final PaymentService paymentService;
// 只有当PaymentService存在时才创建此服务
}
3. 默认实现
如果某个服务接口没有具体实现,可以提供默认的空实现:
java
@Service
@ConditionalOnMissingBean(PaymentService.class)
public class DefaultPaymentService implements PaymentService {
@Override
public PaymentDTO getByMchId(String mchId) {
return null; // 默认返回空
}
// 其他方法的默认实现
}
设计优势
- 松耦合:各模块只依赖接口,不依赖具体实现
- 可测试:便于进行单元测试和Mock
- 可扩展:新增功能只需扩展接口,不影响现有代码
- 统一规范:所有模块遵循相同的接口设计原则
- 向后兼容:使用默认方法确保接口演进的兼容性
这些通用服务接口构成了系统的基础服务层,为上层业务逻辑提供了统一、规范的数据访问方式。