feat(push): 添加推送服务功能支持

- 实现了 ConversationViewModel 来管理对话列表的刷新和状态
- 集成了 FCM 推送服务支持并实现了自动令牌获取机制
- 构建了完整的 PushSDK 推送系统,支持华为、小米、OPPO、VIVO、荣耀等厂商推送
- 添加了推送配置管理和设备注册/注销功能
- 实现了跨平台推送令牌管理和服务绑定逻辑
- 扩展了服务器端功能服务管理器以支持推送服务激活请求流程
这个提交包含在:
XuqmGroup 2026-05-05 22:02:47 +08:00
父节点 af4492e3aa
当前提交 249da309a3

查看文件

@ -8,6 +8,7 @@ import com.xuqm.common.exception.BusinessException;
import com.xuqm.tenant.entity.FeatureServiceEntity;
import com.xuqm.tenant.entity.ServiceActivationRequestEntity;
import com.xuqm.tenant.entity.ServiceActivationRequestEntity.Status;
import com.xuqm.tenant.repository.AppRepository;
import com.xuqm.tenant.repository.FeatureServiceRepository;
import com.xuqm.tenant.repository.ServiceActivationRequestRepository;
import org.springframework.stereotype.Service;
@ -23,13 +24,16 @@ public class FeatureServiceManager {
private final FeatureServiceRepository repository;
private final ServiceActivationRequestRepository requestRepository;
private final AppRepository appRepository;
private final ObjectMapper objectMapper;
public FeatureServiceManager(FeatureServiceRepository repository,
ServiceActivationRequestRepository requestRepository,
AppRepository appRepository,
ObjectMapper objectMapper) {
this.repository = repository;
this.requestRepository = requestRepository;
this.appRepository = appRepository;
this.objectMapper = objectMapper;
}
@ -121,13 +125,18 @@ public class FeatureServiceManager {
req.setReviewedAt(LocalDateTime.now());
requestRepository.save(req);
// Normalize to appKey so SdkConfigController queries are consistent
String normalizedAppId = appRepository.findById(req.getAppId())
.map(app -> app.getAppKey())
.orElse(req.getAppId());
if (isAppWideService(req.getServiceType())) {
List<FeatureServiceEntity> services = repository.findByAppIdAndServiceType(req.getAppId(), req.getServiceType());
List<FeatureServiceEntity> services = repository.findByAppIdAndServiceType(normalizedAppId, req.getServiceType());
if (services.isEmpty()) {
for (FeatureServiceEntity.Platform platform : FeatureServiceEntity.Platform.values()) {
FeatureServiceEntity created = new FeatureServiceEntity();
created.setId(UUID.randomUUID().toString());
created.setAppId(req.getAppId());
created.setAppId(normalizedAppId);
created.setPlatform(platform);
created.setServiceType(req.getServiceType());
created.setEnabled(true);
@ -142,11 +151,11 @@ public class FeatureServiceManager {
}
FeatureServiceEntity entity = repository
.findByAppIdAndPlatformAndServiceType(req.getAppId(), req.getPlatform(), req.getServiceType())
.findByAppIdAndPlatformAndServiceType(normalizedAppId, req.getPlatform(), req.getServiceType())
.orElseGet(() -> {
FeatureServiceEntity e = new FeatureServiceEntity();
e.setId(UUID.randomUUID().toString());
e.setAppId(req.getAppId());
e.setAppId(normalizedAppId);
e.setPlatform(req.getPlatform());
e.setServiceType(req.getServiceType());
e.setCreatedAt(LocalDateTime.now());