feat(auth-group): 新增授权组门禁和电梯关联功能

This commit is contained in:
zcxlsm 2025-07-24 11:20:19 +08:00
parent 31291b4413
commit 399f48f1b4
11 changed files with 119 additions and 29 deletions

View File

@ -128,6 +128,6 @@ public class SisElevatorInfoController extends BaseController {
@GetMapping("/ref/{id}")
public R<List<SisElevatorFloorRefVo>> queryRef(@NotNull(message = "电梯id不能为空")
@PathVariable("id") Long id) {
return R.ok(sisElevatorFloorRefService.queryByElevatorId(id));
return R.ok(sisElevatorFloorRefService.queryByAuthGroupId(id));
}
}

View File

@ -11,7 +11,7 @@ import java.io.Serial;
* 授权组对象 sis_auth_group
*
* @author lsm
* @date 2025-07-23
* @since 2025-07-23
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ -41,6 +41,4 @@ public class SisAuthGroup extends TenantEntity {
* 是否启用(0禁用1启用)
*/
private Boolean isEnable;
}

View File

@ -33,9 +33,14 @@ public class SisElevatorFloorRef extends TenantEntity {
private Long elevatorId;
/**
* 楼层层数
* 楼层id
*/
private Long floorId;
/**
* 授权组id
*/
private Long authGroupId;
}

View File

@ -9,11 +9,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Collection;
/**
* 授权组业务对象 sis_auth_group
*
* @author lsm
* @date 2025-07-23
* @since 2025-07-23
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ -23,25 +25,34 @@ public class SisAuthGroupBo extends BaseEntity {
/**
* 主键id
*/
@NotNull(message = "主键id不能为空", groups = { EditGroup.class })
@NotNull(message = "主键id不能为空", groups = {EditGroup.class})
private Long id;
/**
* 权限名称
*/
@NotBlank(message = "权限名称不能为空", groups = { AddGroup.class, EditGroup.class })
@NotBlank(message = "权限名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String name;
/**
* 面向对象(1-单位2-个人)
*/
@NotNull(message = "面向对象(1-单位、2-个人)不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "面向对象不能为空", groups = {AddGroup.class, EditGroup.class})
private Long groupType;
/**
* 是否启用(0禁用1启用)
* 门禁id
*/
private Boolean isEnable;
private Collection<Long> acIds;
/**
* 电梯
*/
private Collection<Long> eleIds;
/**
* 门禁id
*/
private Collection<Long> floorIds;
}

View File

@ -35,11 +35,17 @@ public class SisElevatorFloorRefBo extends BaseEntity {
private Long elevatorId;
/**
* 楼层层数
* 楼层id
*/
@NotEmpty(message = "楼层层数不能为空", groups = { AddGroup.class, EditGroup.class })
@NotEmpty(message = "楼层id不能为空", groups = { AddGroup.class, EditGroup.class })
private Collection<Long> floorIds;
/**
* 授权组id
*/
@NotNull(message = "授权组id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long authGroupId;

View File

@ -43,5 +43,11 @@ public class SisElevatorFloorRefVo implements Serializable {
@ExcelProperty(value = "楼层id")
private Long floorId;
/**
* 授权组id
*/
@ExcelProperty(value = "授权组id")
private Long authGroupId;
}

View File

@ -1,5 +1,6 @@
package org.dromara.sis.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.sis.domain.SisAuthGroup;
import org.dromara.sis.domain.vo.SisAuthGroupVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@ -8,8 +9,9 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
* 授权组Mapper接口
*
* @author lsm
* @date 2025-07-23
* @since 2025-07-23
*/
@Mapper
public interface SisAuthGroupMapper extends BaseMapperPlus<SisAuthGroup, SisAuthGroupVo> {
}

View File

@ -355,7 +355,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
// 根据单元ID获取楼层信息
List<RemoteFloorVo> floorInfo = remoteFloorService.queryByUnitId(ele.getUnitId());
// 获取电梯楼层关联信息
List<SisElevatorFloorRefVo> floorRefList = elevatorFloorRefService.queryByElevatorId(deviceId);
List<SisElevatorFloorRefVo> floorRefList = elevatorFloorRefService.queryByAuthGroupId(deviceId);
// 获取楼层数组
List<Long> layerArray = floorInfo.stream().map(RemoteFloorVo::getId).sorted().toList();

View File

@ -67,9 +67,9 @@ public interface ISisElevatorFloorRefService {
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据电梯id获取电梯楼层关联信息
* 根据权限组id获取电梯楼层关联信息
*
* @param elevatorId 电梯id
* @param authGroupId 电梯id
*/
List<SisElevatorFloorRefVo> queryByElevatorId(Long elevatorId);
List<SisElevatorFloorRefVo> queryByAuthGroupId(Long authGroupId);
}

View File

@ -1,5 +1,8 @@
package org.dromara.sis.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -9,12 +12,19 @@ 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.property.api.RemoteFloorService;
import org.dromara.property.api.domain.vo.RemoteFloorVo;
import org.dromara.sis.domain.bo.SisAuthGroupRefBo;
import org.dromara.sis.domain.bo.SisElevatorFloorRefBo;
import org.dromara.sis.domain.vo.SisAccessControlVo;
import org.dromara.sis.domain.vo.SisElevatorInfoVo;
import org.dromara.sis.service.*;
import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisAuthGroupBo;
import org.dromara.sis.domain.vo.SisAuthGroupVo;
import org.dromara.sis.domain.SisAuthGroup;
import org.dromara.sis.mapper.SisAuthGroupMapper;
import org.dromara.sis.service.ISisAuthGroupService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@ -24,7 +34,7 @@ import java.util.Collection;
* 授权组Service业务层处理
*
* @author lsm
* @date 2025-07-23
* @since 2025-07-23
*/
@Slf4j
@RequiredArgsConstructor
@ -33,6 +43,13 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
private final SisAuthGroupMapper baseMapper;
private final ISisElevatorInfoService elevatorInfoService;
private final ISisAccessControlService accessControlService;
private final ISisAuthGroupRefService sisAuthGroupRefService;
private final ISisElevatorFloorRefService sisElevatorFloorRefService;
@DubboReference
private RemoteFloorService remoteFloorService;
/**
* 查询授权组
*
@ -76,7 +93,6 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
lqw.orderByAsc(SisAuthGroup::getId);
lqw.like(StringUtils.isNotBlank(bo.getName()), SisAuthGroup::getName, bo.getName());
lqw.eq(bo.getGroupType() != null, SisAuthGroup::getGroupType, bo.getGroupType());
lqw.eq(bo.getIsEnable() != null, SisAuthGroup::getIsEnable, bo.getIsEnable());
return lqw;
}
@ -87,12 +103,57 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(SisAuthGroupBo bo) {
SisAuthGroup add = MapstructUtils.convert(bo, SisAuthGroup.class);
validEntityBeforeSave(add);
SisAuthGroup add = new SisAuthGroup();
add.setName(bo.getName());
add.setGroupType(bo.getGroupType());
// 电梯设备
List<SisElevatorInfoVo> eleVoList = elevatorInfoService.queryListByIds(bo.getEleIds());
if (CollUtil.isEmpty(eleVoList)) {
return false;
}
boolean flag = baseMapper.insert(add) > 0;
Assert.isTrue(flag, "新增授权组失败");
if (flag) {
bo.setId(add.getId());
log.info("开始写入授权组门禁acIds{}", bo.getAcIds());
boolean check;
for(Long ac : bo.getAcIds()){
SisAuthGroupRefBo groupRef = new SisAuthGroupRefBo();
groupRef.setGroupId(add.getId());
groupRef.setDeviceType(1L);
groupRef.setDeviceId(ac);
check = sisAuthGroupRefService.insertByBo(groupRef);
Assert.isTrue(check, "写入授权组门禁失败!");
}
log.info("写入授权组门禁完成");
log.info("开始写入授权组电梯eleIds{}", bo.getEleIds());
for (SisElevatorInfoVo ele : eleVoList) {
SisAuthGroupRefBo groupRef = new SisAuthGroupRefBo();
groupRef.setGroupId(add.getId());
groupRef.setDeviceType(2L);
groupRef.setDeviceId(ele.getElevatorId());
check = sisAuthGroupRefService.insertByBo(groupRef);
Assert.isTrue(check, "写入授权组电梯失败!");
log.info("开始写入授权组电梯楼层floorIds{}", bo.getFloorIds());
// 获取该电梯所在单元的楼层信息
List<RemoteFloorVo> floorVoList = remoteFloorService.queryByUnitId(ele.getUnitId());
// 该单元所有楼层id
List<Long> allFloors = floorVoList.stream().map(RemoteFloorVo::getId).toList();
// 对比找出授权楼层id
List<Long> authFloors = bo.getFloorIds().stream().filter(allFloors::contains).toList();
SisElevatorFloorRefBo refBo = new SisElevatorFloorRefBo();
refBo.setAuthGroupId(add.getId());
refBo.setElevatorId(ele.getElevatorId());
refBo.setFloorIds(authFloors);
sisElevatorFloorRefService.insertByBo(refBo);
}
log.info("写入授权组电梯完成");
}
return flag;
}

View File

@ -89,7 +89,7 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(SisElevatorFloorRefBo bo) {
// 清除已有权限
List<SisElevatorFloorRefVo> list = this.queryByElevatorId(bo.getElevatorId());
List<SisElevatorFloorRefVo> list = this.queryByAuthGroupId(bo.getAuthGroupId());
Collection<Long> ids = list.stream().map(SisElevatorFloorRefVo::getId).toList();
baseMapper.deleteByIds(ids);
@ -97,10 +97,11 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
for (Long num : bo.getFloorIds()){
SisElevatorFloorRef add = new SisElevatorFloorRef();
add.setFloorId(num);
add.setAuthGroupId(bo.getAuthGroupId());
add.setElevatorId(bo.getElevatorId());
flag = baseMapper.insert(add) > 0;
Assert.isTrue(flag, "新增电梯⇄楼层关联关系失败");
}
Assert.isTrue(flag, "新增电梯⇄楼层关联关系失败");
return flag;
}
@ -142,12 +143,12 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi
/**
* 根据电梯id获取电梯楼层关联信息
*
* @param elevatorId 电梯id
* @param authGroupId 电梯id
*/
@Override
public List<SisElevatorFloorRefVo> queryByElevatorId(Long elevatorId) {
public List<SisElevatorFloorRefVo> queryByAuthGroupId(Long authGroupId) {
LambdaQueryWrapper<SisElevatorFloorRef> lqw = Wrappers.lambdaQuery();
lqw.eq(SisElevatorFloorRef::getElevatorId, elevatorId);
lqw.eq(SisElevatorFloorRef::getElevatorId, authGroupId);
return baseMapper.selectVoList(lqw);
}
}