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}") @GetMapping("/ref/{id}")
public R<List<SisElevatorFloorRefVo>> queryRef(@NotNull(message = "电梯id不能为空") public R<List<SisElevatorFloorRefVo>> queryRef(@NotNull(message = "电梯id不能为空")
@PathVariable("id") Long 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 * 授权组对象 sis_auth_group
* *
* @author lsm * @author lsm
* @date 2025-07-23 * @since 2025-07-23
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ -41,6 +41,4 @@ public class SisAuthGroup extends TenantEntity {
* 是否启用(0禁用1启用) * 是否启用(0禁用1启用)
*/ */
private Boolean isEnable; private Boolean isEnable;
} }

View File

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

View File

@ -9,11 +9,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import java.util.Collection;
/** /**
* 授权组业务对象 sis_auth_group * 授权组业务对象 sis_auth_group
* *
* @author lsm * @author lsm
* @date 2025-07-23 * @since 2025-07-23
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ -23,25 +25,34 @@ public class SisAuthGroupBo extends BaseEntity {
/** /**
* 主键id * 主键id
*/ */
@NotNull(message = "主键id不能为空", groups = { EditGroup.class }) @NotNull(message = "主键id不能为空", groups = {EditGroup.class})
private Long id; private Long id;
/** /**
* 权限名称 * 权限名称
*/ */
@NotBlank(message = "权限名称不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "权限名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String name; private String name;
/** /**
* 面向对象(1-单位2-个人) * 面向对象(1-单位2-个人)
*/ */
@NotNull(message = "面向对象(1-单位、2-个人)不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "面向对象不能为空", groups = {AddGroup.class, EditGroup.class})
private Long groupType; 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; private Long elevatorId;
/** /**
* 楼层层数 * 楼层id
*/ */
@NotEmpty(message = "楼层层数不能为空", groups = { AddGroup.class, EditGroup.class }) @NotEmpty(message = "楼层id不能为空", groups = { AddGroup.class, EditGroup.class })
private Collection<Long> floorIds; 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") @ExcelProperty(value = "楼层id")
private Long floorId; private Long floorId;
/**
* 授权组id
*/
@ExcelProperty(value = "授权组id")
private Long authGroupId;
} }

View File

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

View File

@ -355,7 +355,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
// 根据单元ID获取楼层信息 // 根据单元ID获取楼层信息
List<RemoteFloorVo> floorInfo = remoteFloorService.queryByUnitId(ele.getUnitId()); 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(); 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); 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; 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.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; 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 com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; 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.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisAuthGroupBo; import org.dromara.sis.domain.bo.SisAuthGroupBo;
import org.dromara.sis.domain.vo.SisAuthGroupVo; import org.dromara.sis.domain.vo.SisAuthGroupVo;
import org.dromara.sis.domain.SisAuthGroup; import org.dromara.sis.domain.SisAuthGroup;
import org.dromara.sis.mapper.SisAuthGroupMapper; 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.List;
import java.util.Map; import java.util.Map;
@ -24,7 +34,7 @@ import java.util.Collection;
* 授权组Service业务层处理 * 授权组Service业务层处理
* *
* @author lsm * @author lsm
* @date 2025-07-23 * @since 2025-07-23
*/ */
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@ -33,6 +43,13 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
private final SisAuthGroupMapper baseMapper; 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.orderByAsc(SisAuthGroup::getId);
lqw.like(StringUtils.isNotBlank(bo.getName()), SisAuthGroup::getName, bo.getName()); lqw.like(StringUtils.isNotBlank(bo.getName()), SisAuthGroup::getName, bo.getName());
lqw.eq(bo.getGroupType() != null, SisAuthGroup::getGroupType, bo.getGroupType()); lqw.eq(bo.getGroupType() != null, SisAuthGroup::getGroupType, bo.getGroupType());
lqw.eq(bo.getIsEnable() != null, SisAuthGroup::getIsEnable, bo.getIsEnable());
return lqw; return lqw;
} }
@ -87,12 +103,57 @@ public class SisAuthGroupServiceImpl implements ISisAuthGroupService {
* @return 是否新增成功 * @return 是否新增成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(SisAuthGroupBo bo) { public Boolean insertByBo(SisAuthGroupBo bo) {
SisAuthGroup add = MapstructUtils.convert(bo, SisAuthGroup.class); SisAuthGroup add = new SisAuthGroup();
validEntityBeforeSave(add); 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; boolean flag = baseMapper.insert(add) > 0;
Assert.isTrue(flag, "新增授权组失败");
if (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; return flag;
} }

View File

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