feat(auth): 优化授权组相关功能

This commit is contained in:
zcxlsm 2025-08-05 14:36:57 +08:00
parent bbe911119c
commit b7a4e512f0
9 changed files with 104 additions and 41 deletions

View File

@ -6,9 +6,6 @@ import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
import org.dromara.sis.service.ISisElevatorFloorRefService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -40,8 +37,6 @@ public class SisElevatorInfoController extends BaseController {
private final ISisElevatorInfoService sisElevatorInfoService;
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
/**
* 查询电梯基本信息列表
*/
@ -108,26 +103,4 @@ public class SisElevatorInfoController extends BaseController {
@PathVariable("elevatorIds") Long[] elevatorIds) {
return toAjax(sisElevatorInfoService.deleteWithValidByIds(List.of(elevatorIds), true));
}
/**
* 新增电梯楼层关联
*
* @param bo 电梯楼层关联
*/
@RepeatSubmit()
@PostMapping("/ref/add")
public R<Void> addRef(@Validated(AddGroup.class) @RequestBody SisElevatorFloorRefBo bo) {
return toAjax(sisElevatorFloorRefService.insertByBo(bo));
}
/**
* 查询电梯楼层关联
*
* @param id 电梯id
*/
@GetMapping("/ref/{id}")
public R<List<SisElevatorFloorRefVo>> queryRef(@NotNull(message = "电梯id不能为空")
@PathVariable("id") Long id) {
return R.ok(sisElevatorFloorRefService.queryByAuthGroupId(id));
}
}

View File

@ -10,6 +10,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
@ -18,7 +19,7 @@ import java.util.Date;
* 授权组视图对象 sis_auth_group
*
* @author lsm
* @date 2025-07-23
* @since 2025-07-23
*/
@Data
@ExcelIgnoreUnannotated
@ -52,5 +53,19 @@ public class SisAuthGroupVo implements Serializable {
@ExcelProperty(value = "是否启用(0禁用1启用)")
private Boolean isEnable;
/**
* 门禁id
*/
private Collection<Long> acIds;
/**
* 电梯
*/
private Collection<Long> eleIds;
/**
* 门禁id
*/
private Collection<Long> floorIds;
}

View File

@ -79,7 +79,7 @@ public interface ISisAuthGroupRefService {
/**
* 通过权限组id删除授权设备列表
*
* @param groupId 权限id
* @param groupIds 权限id
*/
Boolean deleteByGroupId(Long groupId);
Boolean deleteByGroupId(Collection<Long> groupIds);
}

View File

@ -109,9 +109,17 @@ public interface ISisAuthRecordService {
/**
* 批量删除授权记录
*
* @param ids 入驻员工ids
* @param ids 入驻员工ids
* @param e8Ids e8id
*/
Boolean deleteByPersonIds(Collection<Long> ids, Collection<Long> e8Ids);
/**
* 根据权限组ID查询授权记录
*
* @param groupIds 权限组ID
*/
Boolean queryByGroupIds(Collection<Long> groupIds);
}

View File

@ -74,6 +74,13 @@ public interface ISisElevatorFloorRefService {
*/
List<SisElevatorFloorRefVo> queryByAuthGroupId(Long authGroupId);
/**
* 根据权限组id删除电梯楼层关联信息
*
* @param authGroupIds 权限组ids
*/
Boolean deleteByAuthGroupId(Collection<Long> authGroupIds);
/**
* 批量更新电梯楼层通道关联信息
*

View File

@ -108,7 +108,7 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(Long authGroupId, Collection<Long> acIds, Collection<Long> eleIds, Collection<Long> floorIds) {
// 删除权限组设备关联关系
this.deleteByGroupId(authGroupId);
this.deleteByGroupId(List.of(authGroupId));
log.info("开始写入授权组门禁acIds{}", acIds);
boolean check = false;
@ -203,12 +203,13 @@ public class SisAuthGroupRefServiceImpl implements ISisAuthGroupRefService {
/**
* 通过权限组id删除授权设备列表
*
* @param groupId 权限id
* @param groupIds 权限id
*/
@Override
public Boolean deleteByGroupId(Long groupId) {
@Transactional(rollbackFor = Exception.class)
public Boolean deleteByGroupId(Collection<Long> groupIds) {
LambdaQueryWrapper<SisAuthGroupRef> lqw = Wrappers.lambdaQuery();
lqw.eq(SisAuthGroupRef::getAuthGroupId, groupId);
lqw.in(SisAuthGroupRef::getAuthGroupId, groupIds);
return baseMapper.delete(lqw) > 0;
}
}

View File

@ -10,6 +10,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sis.domain.SisElevatorFloorRef;
import org.dromara.sis.domain.vo.SisAuthGroupRefVo;
import org.dromara.sis.domain.vo.SisElevatorFloorRefVo;
import org.dromara.sis.service.*;
import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisAuthGroupBo;
@ -35,8 +38,9 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
private final SisAuthGroupMapper baseMapper;
private final ISisAuthRecordService sisAuthRecordService;
private final ISisAuthGroupRefService sisAuthGroupRefService;
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
/**
@ -47,7 +51,21 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
*/
@Override
public SisAuthGroupVo queryById(Long id) {
return baseMapper.selectVoById(id);
// 门禁设备
List<SisAuthGroupRefVo> groupRefs = sisAuthGroupRefService.queryListByGroupId(id);
Collection<Long> acIds = groupRefs.stream().filter(vo -> vo.getDeviceType() == 1).map(SisAuthGroupRefVo::getDeviceId).toList();
// 楼层
List<SisElevatorFloorRefVo> floorRefs = sisElevatorFloorRefService.queryByAuthGroupId(id);
Collection<Long> floorIds = floorRefs.stream().map(SisElevatorFloorRefVo::getFloorId).toList();
SisAuthGroupVo vo = baseMapper.selectVoById(id);
vo.setAcIds(acIds);
vo.setFloorIds(floorIds);
return vo;
}
/**
@ -144,10 +162,25 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
boolean auth = sisAuthRecordService.queryByGroupIds(ids);
Assert.isTrue(!auth, "授权组已分配");
}
return baseMapper.deleteByIds(ids) > 0;
boolean flag = baseMapper.deleteByIds(ids) > 0;
Assert.isTrue(flag, "删除授权组失败");
if (flag) {
// 删除授权组授权设备关联表
Boolean ref = sisAuthGroupRefService.deleteByGroupId(ids);
Assert.isTrue(ref, "删除授权组⇄授权设备失败");
// 删除授权组电梯楼层
Boolean floor = sisElevatorFloorRefService.deleteByAuthGroupId(ids);
Assert.isTrue(floor, "删除授权组⇄电梯⇄楼层失败");
}
return flag;
}
}

View File

@ -375,4 +375,17 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService {
}
return flag;
}
/**
* 根据权限组ID查询授权记录
*
* @param groupIds 权限组IDs
*/
@Override
public Boolean queryByGroupIds(Collection<Long> groupIds){
LambdaQueryWrapper<SisAuthRecord> lqw = Wrappers.lambdaQuery();
lqw.in(SisAuthRecord::getGroupId, groupIds);
List<SisAuthRecordVo> authVoList = baseMapper.selectVoList(lqw);
return CollUtil.isNotEmpty(authVoList);
}
}

View File

@ -166,17 +166,30 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
}
/**
* 根据电梯id获取电梯楼层关联信息
* 根据权限组id获取电梯楼层关联信息
*
* @param authGroupId 电梯id
*/
@Override
public List<SisElevatorFloorRefVo> queryByAuthGroupId(Long authGroupId) {
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
lqw.eq(SisElevatorFloorRef::getElevatorId, authGroupId);
lqw.eq(SisElevatorFloorRef::getAuthGroupId, authGroupId);
return baseMapper.selectVoList(lqw);
}
/**
* 根据权限组id删除电梯楼层关联信息
*
* @param authGroupIds 权限组ids
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteByAuthGroupId(Collection<Long> authGroupIds) {
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
lqw.in(SisElevatorFloorRef::getAuthGroupId, authGroupIds);
return baseMapper.delete(lqw) > 0;
}
/**
* 批量更新电梯楼层通道关联信息
*