推送订阅功能

This commit is contained in:
chenxing
2026-08-14 09:03:17 +08:00
parent 0233ecb525
commit e55c2cb209
15 changed files with 1154 additions and 2 deletions
@@ -18,6 +18,9 @@ import com.yunhai.userbase.repository.SysUserGroupRelRepository;
import com.yunhai.userbase.repository.SysUserRepository;
import com.yunhai.userbase.service.ISysGroupService;
import com.yunhai.userbase.service.ISysUserService;
import com.yunhai.userbase.event.DataSyncEvent;
import com.yunhai.userbase.model.push.PushInterfaceType;
import org.springframework.context.ApplicationEventPublisher;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
@@ -79,6 +82,9 @@ public class SysUserService implements ISysUserService {
@Autowired
private SysUserAppRoleRelRepository sysUserAppRoleRelRepository;
@Autowired
private ApplicationEventPublisher eventPublisher;
@Autowired
private SysGroupRepository sysGroupRepository;
@@ -130,7 +136,8 @@ public class SysUserService implements ISysUserService {
// disabled 用枚举存储:不传时默认 NORMAL(正常/未禁用)
entity.setDisabled(request.getDisabled() != null ? resolveStatus(request.getDisabled()) : StatusEnum.NORMAL);
entity.setExpired(request.getExpired() != null ? request.getExpired() : false);
sysUserRepository.save(entity);
SysUser saved = sysUserRepository.save(entity);
publishUserEvent(PushInterfaceType.ADD_USER, saved.getId());
// 写入组用户关联
SysUserGroupRel rel = new SysUserGroupRel();
@@ -175,6 +182,7 @@ public class SysUserService implements ISysUserService {
entity.setExpired(request.getExpired());
}
sysUserRepository.save(entity);
publishUserEvent(PushInterfaceType.UPDATE_USER, id);
}
@Override
@@ -188,6 +196,7 @@ public class SysUserService implements ISysUserService {
// AI-FIX(角色授权): 删除用户时级联清理用户-业务角色绑定(逻辑外键无物理 FK,避免残留孤儿数据)
sysUserAppRoleRelRepository.deleteByUserIdBulk(id);
sysUserRepository.deleteById(id);
publishUserEvent(PushInterfaceType.DELETE_USER, id);
}
@Override
@@ -211,6 +220,7 @@ public class SysUserService implements ISysUserService {
throw new DException("存在无效用户");
}
List<Integer> deletedUserIds = new ArrayList<>();
for (Integer userId : userIds) {
// 删除当前组关联
sysUserGroupRelRepository.deleteByUserIdAndGroupId(userId, groupId);
@@ -218,8 +228,12 @@ public class SysUserService implements ISysUserService {
if (sysUserGroupRelRepository.countByUserId(userId) == 0) {
sysUserAppRoleRelRepository.deleteByUserIdBulk(userId);
sysUserRepository.deleteById(userId);
deletedUserIds.add(userId);
}
}
if (!deletedUserIds.isEmpty()) {
publishUserEvent(PushInterfaceType.DELETE_USER, deletedUserIds);
}
}
@Override
@@ -230,6 +244,7 @@ public class SysUserService implements ISysUserService {
// 实体 disabled 字段为 StatusEnum(0=正常/未禁用,1=禁用):boolean 直接映射枚举
entity.setDisabled(disabled ? StatusEnum.DISABLED : StatusEnum.NORMAL);
sysUserRepository.save(entity);
publishUserEvent(PushInterfaceType.UPDATE_USER, id);
}
@Override
@@ -247,6 +262,8 @@ public class SysUserService implements ISysUserService {
user.setDisabled(targetStatus);
}
sysUserRepository.saveAll(users);
publishUserEvent(PushInterfaceType.UPDATE_USER,
users.stream().map(SysUser::getId).collect(Collectors.toList()));
}
@Override
@@ -362,6 +379,7 @@ public class SysUserService implements ISysUserService {
}
sysUserGroupRelRepository.saveAll(rels);
}
publishUserEvent(PushInterfaceType.UPDATE_USER, userIds);
}
@Override
@@ -936,4 +954,23 @@ public class SysUserService implements ISysUserService {
return null;
}
}
// ===================== 推送事件 =====================
private void publishUserEvent(PushInterfaceType type, Integer userId) {
DataSyncEvent e = new DataSyncEvent();
e.setType(type);
e.setUserIds(Collections.singletonList(userId));
eventPublisher.publishEvent(e);
}
private void publishUserEvent(PushInterfaceType type, List<Integer> userIds) {
if (userIds == null || userIds.isEmpty()) {
return;
}
DataSyncEvent e = new DataSyncEvent();
e.setType(type);
e.setUserIds(userIds);
eventPublisher.publishEvent(e);
}
}