diff --git a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java index fe4cb830..56e240dd 100644 --- a/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java +++ b/ruoyi-api/property-api/src/main/java/org/dromara/property/api/domain/vo/RemoteResidentPersonVo.java @@ -34,4 +34,6 @@ public class RemoteResidentPersonVo implements Serializable { private Date authBegDate; private Date authEndDate; + + private Integer rosterType; } diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuthService.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuthService.java index 254ee655..46467166 100644 --- a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuthService.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSisAuthService.java @@ -38,12 +38,12 @@ public interface RemoteSisAuthService { Boolean queryPersonAuth(Long authGroupId, Long personId); /** - * 通过MD5,查询图片id + * 通过MD5,查询华为盒子id * * @param imgMd5 图片MD5 * @return Long */ - Long queryImgIdByImgMd5(String imgMd5); + Long queryHuaweiBoxIdByImgMd5(String imgMd5); /** * 图片写入华为盒子 diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java index c08c1dfe..da60b171 100644 --- a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java +++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePersonAuth.java @@ -43,4 +43,6 @@ public class RemotePersonAuth implements Serializable { private Date authEndDate; + private Integer rosterType; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java index 015a4355..70b1259c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ResidentPerson.java @@ -108,6 +108,12 @@ public class ResidentPerson extends TenantEntity { * e8平台id */ private Long eEightId; + + /** + * 人员标签类型 + */ + private Integer rosterType; + /** * 创建人id */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java index 08794779..46a087f1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/ResidentPersonBo.java @@ -121,5 +121,10 @@ public class ResidentPersonBo extends BaseEntity { */ private String remark; + /** + * 人员标签类型 + */ + private Integer rosterType = 2; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java index 2ff3eb57..88f0d0b2 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/ResidentPersonVo.java @@ -138,5 +138,10 @@ public class ResidentPersonVo implements Serializable { */ private String idCard; + /** + * 人员标签类型 + */ + private Integer rosterType; + } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java index 2121eee2..9fa95e96 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/dubbo/RemoteResidentPersonServiceImpl.java @@ -35,6 +35,7 @@ public class RemoteResidentPersonServiceImpl implements RemoteResidentPersonServ remoteResidentPersonVo.setName(vo.getUserName()); remoteResidentPersonVo.setIdCard(vo.getIdCard()); remoteResidentPersonVo.setGender(vo.getGender()); + remoteResidentPersonVo.setRosterType(vo.getRosterType()); remoteResidentPersonVo.setAuthGroupId(vo.getAuthGroupId()); remoteResidentPersonVo.setAuthBegDate(vo.getAuthBegDate()); remoteResidentPersonVo.setAuthEndDate(vo.getAuthEndDate()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java index b3aed1ea..5ba0c70e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ResidentPersonServiceImpl.java @@ -140,31 +140,26 @@ public class ResidentPersonServiceImpl implements IResidentPersonService { ResidentPerson update = MapstructUtils.convert(bo, ResidentPerson.class); assert update != null; - boolean flag; // 人脸照片存在时,才同步修改授权 if (update.getAuthGroupId() != null && update.getAuthEndDate() != null && update.getImg() != null) { ResidentPersonVo vo = queryById(update.getId()); Long e8Id = vo.getEEightId(); - baseMapper.updateById(update); // 显式移除e8id LambdaUpdateWrapper lqw = new LambdaUpdateWrapper<>(); lqw.eq(ResidentPerson::getId, update.getId()) .set(ResidentPerson::getEEightId, null); - flag = baseMapper.update(lqw) > 0; + boolean check = baseMapper.update(lqw) > 0; - - if (flag && e8Id != null) { + if (check && e8Id != null) { log.info("开始修改授权记录, {}", bo.getUserName()); // 先删除,定时任务增加 Boolean auth = remoteSisAuthService.deletePersonAuth(List.of(update.getId()), List.of(e8Id)); Assert.isTrue(auth, "修改授权记录失败!"); } - - } else { - flag = baseMapper.updateById(update) > 0; } + boolean flag = baseMapper.updateById(update) > 0; Assert.isTrue(flag, "修改入驻员工失败!"); return flag; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java index 1d325904..5f2c6deb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisPersonLibImg.java @@ -83,4 +83,9 @@ public class SisPersonLibImg extends TenantEntity { */ private String imgMd5Value; + /** + * 人员标签 + */ + private Integer rosterType; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java index abb1c577..41b08246 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java @@ -91,4 +91,9 @@ public class SisPersonLibImgBo extends BaseEntity { */ private String imgMd5Value; + /** + * 人员标签 + */ + private Integer rosterType; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/RosterTypeEnum.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/RosterTypeEnum.java new file mode 100644 index 00000000..6dd17231 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/RosterTypeEnum.java @@ -0,0 +1,32 @@ +package org.dromara.sis.domain.enums; + +import lombok.Getter; + +/** + * @author lsm + * @apiNote RosterTypeEnum + * @since 2025/8/7 + */ +@Getter +public enum RosterTypeEnum { + /** + * 红名单 + */ + RED_LIST(1), + + /** + * 白名单 + */ + WHITE_LIST(2), + + /** + * 黑名单名单 + */ + BLACK_LIST(3); + + private final Integer code; + + RosterTypeEnum(Integer code) { + this.code = code; + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthRecordVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthRecordVo.java index 6b9f1a11..c8ebd1dd 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthRecordVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAuthRecordVo.java @@ -62,5 +62,9 @@ public class SisAuthRecordVo implements Serializable { @ExcelProperty(value = "结束时间") private Date endDate; + /** + * 人员标签 + */ + private Integer rosterType; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java index d9998833..18b17e2a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java @@ -102,4 +102,10 @@ public class SisPersonLibImgVo implements Serializable { */ @ExcelProperty(value = "图片MD5") private String imgMd5Value; + + /** + * 人员标签 + */ + @ExcelProperty(value = "人员标签") + private Integer rosterType; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java index 4418cf1f..10dbe3a0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSisAuthServiceImpl.java @@ -85,15 +85,15 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { } /** - * 通过MD5,查询图片id + * 通过MD5,查询华为盒子id * * @param imgMd5 图片MD5 * @return Long */ @Override - public Long queryImgIdByImgMd5(String imgMd5) { + public Long queryHuaweiBoxIdByImgMd5(String imgMd5) { SisPersonLibImgVo vo = sisPersonLibImgService.queryByImgMd5(imgMd5); - return vo != null ? vo.getId() : null; + return vo != null ? vo.getRemoteImgId() : null; } /** @@ -118,6 +118,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { pId = huaWeiBoxApi.addPerson(List.of(req)); } catch (Exception e) { + log.error("同步华为盒子失败:{}----{}", person.getName(), person.getId()); return null; } return pId; @@ -152,7 +153,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { try { log.info("e8平台上传照片"); String e8ImgUrl = e8PlatformApi.uploadFace(imgByte); - Assert.notNull(e8ImgUrl, "图片上传E8平台失败"); + Assert.notNull(e8ImgUrl, "图片上传E8平台失败:" + person.getName() + "----" + person.getId()); log.info("e8平台上传照片完成"); count++; // 图片上传完成步进器+1 @@ -161,7 +162,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { req.setName(person.getName()); req.setGender(person.getSex() != 1 ? 0 : 1); e8Id = e8PlatformApi.addCustomer(req).getId(); - Assert.notNull(e8Id, "e8同步新建人员失败"); + Assert.notNull(e8Id, "e8同步新建人员失败:" + person.getName() + "----" + person.getId()); log.info("e8同步新建人员完成"); count++; // 新增人员完成步进器+1 @@ -172,7 +173,7 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { voucherReq.setTxtData(e8ImgUrl); voucherReq.setCardType(34); Long voucherId = e8PlatformApi.issueVoucher(voucherReq); - Assert.notNull(voucherId, "e8平台发行凭证失败"); + Assert.notNull(voucherId, "e8平台发行凭证失败:" + person.getName() + "----" + person.getId()); log.info("e8平台发行凭证成功"); count++; // 发行凭证完成步进器+1 @@ -199,11 +200,12 @@ public class RemoteSisAuthServiceImpl implements RemoteSisAuthService { log.info("e8平台开始授权"); Boolean flag = e8PlatformApi.addCustomerAuth(authReq); - Assert.isTrue(flag, "E8平台授权失败!"); + Assert.isTrue(flag, "E8平台授权失败:" + person.getName() + "----" + person.getId()); log.info("E8平台授权完成!"); count++; // 授权完成步进器+1 } } catch (Exception e) { + log.info(e.getMessage()); return null; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java index 5a25d307..c21b2c31 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAuthRecordServiceImpl.java @@ -18,6 +18,7 @@ import org.dromara.sis.api.domain.RemotePersonAuth; import org.dromara.sis.domain.bo.SisAccessControlBo; import org.dromara.sis.domain.bo.SisElevatorInfoBo; import org.dromara.sis.domain.bo.SisPersonLibImgBo; +import org.dromara.sis.domain.enums.RosterTypeEnum; import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.sis.domain.vo.SisElevatorInfoVo; import org.dromara.sis.domain.vo.SisPersonLibImgVo; @@ -115,30 +116,34 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByPerson(RemotePersonAuth bo) { - SisAuthRecord add = new SisAuthRecord(); - add.setTargetType(1L); - add.setTargetId(bo.getId()); - add.setGroupId(bo.getAuthGroupId()); - add.setBegDate(bo.getAuthBegDate()); - add.setEndDate(bo.getAuthEndDate()); - add.setTenantId("000000"); - boolean flag = baseMapper.insert(add) > 0; - Assert.isTrue(flag, "新增授权记录失败"); + // 黑名单不加授权记录 + if (!Objects.equals(bo.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) { + SisAuthRecord add = new SisAuthRecord(); + add.setTargetType(1L); + add.setTargetId(bo.getId()); + add.setGroupId(bo.getAuthGroupId()); + add.setBegDate(bo.getAuthBegDate()); + add.setEndDate(bo.getAuthEndDate()); + add.setTenantId("000000"); + boolean flag = baseMapper.insert(add) > 0; + Assert.isTrue(flag, "新增授权记录失败"); + } try { // 记录图片md5值 byte[] imgByte = remoteFileService.downloadToByteArray(Long.parseLong(bo.getOssId())); String md5 = calculateMD5(imgByte); // 写入安防人像信息 - this.syncPersonImg(bo, md5); + Boolean sync = this.syncPersonImg(bo, md5); + Assert.isTrue(sync, "写入安防人像信息失败"); } catch (Exception e) { - log.info("下载图片失败"); + log.info(e.getMessage()); } - return flag; + return true; } - private void syncPersonImg(RemotePersonAuth bo, String md5) { + private Boolean syncPersonImg(RemotePersonAuth bo, String md5) { log.info("开始写入安防人像信息"); SisPersonLibImgBo personLibImg = new SisPersonLibImgBo(); personLibImg.setImgOssId(Long.parseLong(bo.getOssId())); @@ -149,8 +154,10 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { personLibImg.setCertificateNo(bo.getIdCardNumber()); personLibImg.setResidentPersonId(bo.getId()); personLibImg.setImgMd5Value(md5); - sisPersonLibImgService.insertByBo(personLibImg); - log.info("写入安防人像信息完成"); + personLibImg.setRosterType(bo.getRosterType()); + Boolean flag = sisPersonLibImgService.insertByBo(personLibImg); + if (flag) log.info("写入安防人像信息完成"); + return flag; } /** @@ -352,28 +359,26 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { public Boolean deleteByPersonIds(Collection ids, Collection e8Ids) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.in(SisAuthRecord::getTargetId, ids); - boolean flag = baseMapper.delete(lqw) > 0; - Assert.isTrue(flag, "删除授权记录失败"); + baseMapper.delete(lqw); - if (flag) { - List list = new ArrayList<>(); - ids.forEach(id -> { - SisPersonLibImgVo imgVo = sisPersonLibImgService.queryByPersonId(id); - if (imgVo != null) { - list.add(imgVo); - } - }); - Collection imgIds = list.stream().map(SisPersonLibImgVo::getId).toList(); - if (CollUtil.isNotEmpty(imgIds)){ - flag = sisPersonLibImgService.deleteWithValidByIds(imgIds, false); - Assert.isTrue(flag, "删除人像库图片失败"); - } - - if (CollUtil.isNotEmpty(e8Ids)){ - e8Ids.forEach(e8PlatformApi::deleteCustomer); + List list = new ArrayList<>(); + ids.forEach(id -> { + SisPersonLibImgVo imgVo = sisPersonLibImgService.queryByPersonId(id); + if (imgVo != null) { + list.add(imgVo); } + }); + Collection imgIds = list.stream().map(SisPersonLibImgVo::getId).toList(); + if (CollUtil.isNotEmpty(imgIds)) { + Boolean flag = sisPersonLibImgService.deleteWithValidByIds(imgIds, false); + Assert.isTrue(flag, "删除人像库图片失败"); } - return flag; + + if (CollUtil.isNotEmpty(e8Ids)) { + e8Ids.forEach(e8PlatformApi::deleteCustomer); + } + + return true; } /** @@ -382,7 +387,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { * @param groupIds 权限组IDs */ @Override - public Boolean queryByGroupIds(Collection groupIds){ + public Boolean queryByGroupIds(Collection groupIds) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.in(SisAuthRecord::getGroupId, groupIds); List authVoList = baseMapper.selectVoList(lqw); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java index 2f860a0a..e90ed521 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java @@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.property.api.RemoteFloorService; +import org.dromara.sis.domain.enums.RosterTypeEnum; import org.dromara.sis.domain.vo.*; import org.dromara.sis.producer.CleanLiftAuthRocketProducer; import org.dromara.sis.sdk.e8.E8PlatformApi; @@ -70,6 +71,12 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer // 不是内部人员 产生紧急的告警信息 alarmEventsService.createAlarmRecord(deviceIp, 1, 1, "陌生人员入内", smallImg, bigImg); return; + }else { + if (Objects.equals(authRecord.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) { + log.info("人员[{}]在黑名单中,暂不处理。", person); + alarmEventsService.createAlarmRecord(deviceIp, 3, 1, "黑名单人员入内", smallImg, bigImg); + return; + } } Date now = new Date(); diff --git a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml index eb980241..d1febb83 100644 --- a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml @@ -5,7 +5,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"