From 9a1a87800f47a7fc42583c7f4c5080b62b08a489 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Tue, 1 Jul 2025 17:10:04 +0800 Subject: [PATCH 1/2] feat(sis): MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 图像库图片改为通过ossId获取 - SisPersonLibImg 字段 imgUrl 更改为 imgOssId,类型同步更改 - 移除SisDeviceManage 中的 accessControlId 字段 --- ruoyi-api/pom.xml | 1 + .../resource/api/RemoteFileService.java | 10 ++++++ .../resource/api/RemoteFileServiceMock.java | 12 +++++++ .../dromara/common/oss/core/OssClient.java | 31 +++++++++++++++++++ .../dromara/sis/domain/SisDeviceManage.java | 5 --- .../dromara/sis/domain/SisPersonLibImg.java | 4 +-- .../sis/domain/bo/SisDeviceManageBo.java | 5 --- .../sis/domain/bo/SisPersonLibImgBo.java | 6 ++-- .../sis/domain/vo/SisDeviceManageVo.java | 6 ---- .../sis/domain/vo/SisPersonLibImgVo.java | 6 ++-- .../impl/SisAuthRecordServiceImpl.java | 17 ++++++++-- .../impl/SisDeviceManageServiceImpl.java | 1 - .../impl/SisPersonLibImgServiceImpl.java | 2 +- .../resource/dubbo/RemoteFileServiceImpl.java | 14 ++++++++- .../resource/service/ISysOssService.java | 8 +++++ .../service/impl/SysOssServiceImpl.java | 18 +++++++++++ 16 files changed, 116 insertions(+), 30 deletions(-) diff --git a/ruoyi-api/pom.xml b/ruoyi-api/pom.xml index 8b5f0b9..e276c9a 100644 --- a/ruoyi-api/pom.xml +++ b/ruoyi-api/pom.xml @@ -13,6 +13,7 @@ ruoyi-api-system ruoyi-api-resource ruoyi-api-workflow + property-api ruoyi-api diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java index 2204de6..182ca62 100644 --- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java +++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileService.java @@ -1,8 +1,10 @@ package org.dromara.resource.api; +import jakarta.servlet.http.HttpServletResponse; import org.dromara.common.core.exception.ServiceException; import org.dromara.resource.api.domain.RemoteFile; +import java.io.IOException; import java.util.List; /** @@ -35,4 +37,12 @@ public interface RemoteFileService { * @return 列表 */ List selectByIds(String ossIds); + + /** + * 文件下载方法,支持一次性下载完整文件 + * + * @param ossId OSS对象ID + * @return byte[] 返回下载的字节数组 + */ + byte[] downloadToByteArray(Long ossId) throws IOException; } diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java index 5ce7c5a..fb6452f 100644 --- a/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java +++ b/ruoyi-api/ruoyi-api-resource/src/main/java/org/dromara/resource/api/RemoteFileServiceMock.java @@ -1,9 +1,11 @@ package org.dromara.resource.api; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.utils.StringUtils; import org.dromara.resource.api.domain.RemoteFile; +import java.io.IOException; import java.util.List; /** @@ -50,4 +52,14 @@ public class RemoteFileServiceMock implements RemoteFileService { return List.of(); } + /** + * 文件下载方法,支持一次性下载完整文件 + * + * @param ossId OSS对象ID + * @return byte[] 返回下载的字节数组 + */ + public byte[] downloadToByteArray(Long ossId) throws IOException { + log.warn("服务调用异常 -> 降级处理"); + return new byte[0]; + } } diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java index 99bc294..f5d6d13 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java @@ -265,6 +265,37 @@ public class OssClient { } } + /** + * 下载文件从 Amazon S3 到 byte[] + * + * @param key 文件在 Amazon S3 中的对象键 + * @return byte[] 返回下载的字节数组 + * @throws OssException 如果下载失败,抛出自定义异常 + */ + public byte[] downloadToByteArray(String key) { + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + // 构建下载请求 + DownloadRequest> downloadRequest = DownloadRequest.builder() + // 文件对象 + .getObjectRequest(y -> y.bucket(properties.getBucketName()) + .key(key) + .build()) + .addTransferListener(LoggingTransferListener.create()) + // 使用订阅转换器 + .responseTransformer(AsyncResponseTransformer.toBlockingInputStream()) + .build(); + // 使用 S3TransferManager 下载文件 + Download> responseFuture = transferManager.download(downloadRequest); + // 输出到流中 + try (ResponseInputStream responseStream = responseFuture.completionFuture().join().result()) { // auto-closeable stream + responseStream.transferTo(out); // 阻塞调用线程 blocks the calling thread + } + return out.toByteArray(); + } catch (Exception e) { + throw new OssException("文件下载失败,错误信息:[" + e.getMessage() + "]"); + } + } + /** * 删除云存储服务中指定路径下文件 * diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java index 09015a2..e72e57a 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java @@ -68,11 +68,6 @@ public class SisDeviceManage extends BaseEntity { */ private Integer vcrPort; - /** - * 门禁id - */ - private Long accessControlId; - /** * 设备账号 */ 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 0332d13..0dc26c9 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 @@ -39,9 +39,9 @@ public class SisPersonLibImg extends TenantEntity { private String imgName; /** - * 图片的存储地址 + * 图片ossId */ - private String imgUrl; + private Long imgOssId; /** * 性别 1:男 2:女 99:未说明 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceManageBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceManageBo.java index 7ae514e..cc1d0f3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceManageBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisDeviceManageBo.java @@ -66,11 +66,6 @@ public class SisDeviceManageBo extends BaseEntity { */ private Long vcrPort; - /** - * 门禁id - */ - private Long accessControlId; - /** * 设备账号 */ 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 fb586c1..e326fcb 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 @@ -39,10 +39,10 @@ public class SisPersonLibImgBo extends BaseEntity { private String imgName; /** - * 图片的存储地址 + * 图片ossId */ - @NotBlank(message = "图片的存储地址不能为空", groups = {AddGroup.class, EditGroup.class}) - private String imgUrl; + @NotBlank(message = "图片ossId不能为空", groups = {AddGroup.class, EditGroup.class}) + private String imgOssId; /** * 性别 1:男2:女 99:未说明 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java index 7b4c4ea..fd1c616 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java @@ -73,12 +73,6 @@ public class SisDeviceManageVo implements Serializable { @ExcelProperty(value = "录像机端口") private Integer vcrPort; - /** - * 门禁id - */ - @ExcelProperty(value = "门禁id") - private Long accessControlId; - /** * 设备账号 */ 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 8a3a39d..14c1c73 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 @@ -45,10 +45,10 @@ public class SisPersonLibImgVo implements Serializable { private String imgName; /** - * 图片的存储地址 + * 图片ossId */ - @ExcelProperty(value = "图片的存储地址") - private String imgUrl; + @ExcelProperty(value = "图片ossId") + private Long imgOssId; /** * 性别 1:男 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 6f4f07d..ceb910a 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 @@ -4,11 +4,14 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.resource.api.RemoteFileService; import org.dromara.sis.domain.SisAuthRecord; import org.dromara.sis.domain.bo.SingleAuthRecordBo; import org.dromara.sis.domain.bo.SisAuthRecordBo; @@ -57,6 +60,9 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { private final ISisLibDeviceImgRefService sisLibDeviceImgRefService; private final ISisAccessControlDeviceService sisAccessControlDeviceService; + @DubboReference + private final RemoteFileService remoteFileService; + /** * 查询授权记录 * @@ -142,14 +148,18 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { List acList = sisAccessControlService.queryListByIds(bo.getAcIds()); Assert.notEmpty(acList, "门禁设备不存在!"); + + try { log.info("开始对宇视盒子下发照片,图片:{}、设备:{}", bo.getImgIds(), eqpIds); - for (SisPersonLibImgVo imgVo : imgList) { for (Long eqpId : eqpIds) { long eqp_lib_id; Integer eqp_lib_img_id; - byte[] imageByte = Files.readAllBytes(Paths.get(imgVo.getImgUrl())); + + byte[] imageByte = remoteFileService.downloadToByteArray(imgVo.getImgOssId()); + Assert.notNull(imageByte, "图片下载失败"); +// byte[] imageByte = Files.readAllBytes(Paths.get(imgVo.getImgUrl())); SisAccessControlDeviceVo vo = sisAccessControlDeviceService.queryById(eqpId); Assert.notNull(vo, "门禁控制设备不存在,id=" + eqpId); @@ -207,7 +217,8 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { log.info("开始写入E8平台,图片:{}、门禁:{}", bo.getImgIds(), bo.getAcIds()); for (SisPersonLibImgVo imgVo : imgList) { - byte[] imageByte = Files.readAllBytes(Paths.get(imgVo.getImgUrl())); + byte[] imageByte = remoteFileService.downloadToByteArray(imgVo.getImgOssId()); + Assert.notNull(imageByte, "图片下载失败"); log.info("E8平台上传图片,{}", imgVo.getId()); String url = e8VouchService.uploadFace(imageByte); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java index 7b01fa2..1f5fff0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java @@ -81,7 +81,6 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService { lqw.eq(bo.getParentId() != null, SisDeviceManage::getParentId, bo.getParentId()); lqw.eq(StringUtils.isNotBlank(bo.getVcrIp()), SisDeviceManage::getVcrIp, bo.getVcrIp()); lqw.eq(bo.getVcrPort() != null, SisDeviceManage::getVcrPort, bo.getVcrPort()); - lqw.eq(bo.getAccessControlId() != null, SisDeviceManage::getAccessControlId, bo.getAccessControlId()); return lqw; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java index 9d4ca82..466b232 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java @@ -82,7 +82,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { lqw.orderByAsc(SisPersonLibImg::getId); lqw.eq(bo.getLibId() != null, SisPersonLibImg::getLibId, bo.getLibId()); lqw.like(StringUtils.isNotBlank(bo.getImgName()), SisPersonLibImg::getImgName, bo.getImgName()); - lqw.eq(StringUtils.isNotBlank(bo.getImgUrl()), SisPersonLibImg::getImgUrl, bo.getImgUrl()); + lqw.eq(bo.getImgOssId() != null, SisPersonLibImg::getImgOssId, bo.getImgOssId()); lqw.eq(bo.getSex() != null, SisPersonLibImg::getSex, bo.getSex()); lqw.eq(StringUtils.isNotBlank(bo.getEmail()), SisPersonLibImg::getEmail, bo.getEmail()); lqw.eq(StringUtils.isNotBlank(bo.getTel()), SisPersonLibImg::getTel, bo.getTel()); diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java index dcdc9bd..bbaa357 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/dubbo/RemoteFileServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.resource.dubbo; import cn.hutool.core.convert.Convert; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboService; @@ -18,6 +19,7 @@ import org.dromara.resource.service.ISysOssService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.util.List; /** @@ -82,8 +84,18 @@ public class RemoteFileServiceImpl implements RemoteFileService { * @return 列表 */ @Override - public List selectByIds(String ossIds){ + public List selectByIds(String ossIds) { List sysOssVos = sysOssService.listByIds(StringUtils.splitTo(ossIds, Convert::toLong)); return MapstructUtils.convert(sysOssVos, RemoteFile.class); } + + /** + * 文件下载方法,支持一次性下载完整文件 + * + * @param ossId OSS对象ID + * @return byte[] 返回下载的字节数组 + */ + public byte[] downloadToByteArray(Long ossId) throws IOException { + return sysOssService.downloadToByteArray(ossId); + } } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java index c756cc4..76c545e 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/ISysOssService.java @@ -92,4 +92,12 @@ public interface ISysOssService { * @return 结果 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 文件下载方法,支持一次性下载完整文件 + * + * @param ossId OSS对象ID + * @return byte[] 返回下载的字节数组 + */ + byte[] downloadToByteArray(Long ossId) throws IOException; } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java index 2f4a047..2e94612 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/org/dromara/resource/service/impl/SysOssServiceImpl.java @@ -159,6 +159,24 @@ public class SysOssServiceImpl implements ISysOssService { storage.download(sysOss.getFileName(), response.getOutputStream(), response::setContentLengthLong); } + /** + * 文件下载方法,支持一次性下载完整文件 + * + * @param ossId OSS对象ID + * @return byte[] 返回下载的字节数组 + */ + @Override + public byte[] downloadToByteArray(Long ossId) throws IOException { + SysOssVo sysOss = SpringUtils.getAopProxy(this).getById(ossId); + if (ObjectUtil.isNull(sysOss)) { + throw new ServiceException("文件数据不存在!"); + } +// FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName()); +// response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); + OssClient storage = OssFactory.instance(sysOss.getService()); + return storage.downloadToByteArray(sysOss.getFileName()); + } + /** * 上传 MultipartFile 到对象存储服务,并保存文件信息到数据库 * From a065d72724ffaaa05055fe158acf0a2d09cb86a4 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Tue, 1 Jul 2025 21:17:22 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(sis):=20=20-=20E8=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E6=8E=88=E6=9D=83=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../door/res/AuthDoorDeviceFindRes.java | 4 +- .../impl/SisAuthRecordServiceImpl.java | 43 ++++++++++--------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java index f2cf2d6..7952031 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java @@ -11,12 +11,12 @@ import lombok.Data; public class AuthDoorDeviceFindRes { /** - * id + * 门id */ private Long id; /** - * deviceId + * 门禁Id */ private Long deviceId; } 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 ceb910a..d4d5254 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 @@ -149,7 +149,6 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { Assert.notEmpty(acList, "门禁设备不存在!"); - try { log.info("开始对宇视盒子下发照片,图片:{}、设备:{}", bo.getImgIds(), eqpIds); for (SisPersonLibImgVo imgVo : imgList) { @@ -239,34 +238,38 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { log.info("E8平台发行凭证完成!"); log.info("E8平台授权凭证"); - // 查询所有e8设备并分组 - List authDoor = e8DoorDeviceService.getPageAuthDoorDeviceList(); - Map authDoorMap = authDoor.stream().collect(Collectors.toMap(AuthDoorDeviceFindRes::getDeviceId, authDoorRes -> authDoorRes)); + // 查询E8授权门列表 + List authDoorList = e8DoorDeviceService.getPageAuthDoorDeviceList(); + Assert.notEmpty(authDoorList, "E8平台授权门列表为空"); // E8 授权列表 List authList = new ArrayList<>(acList.size()); // 授权记录 List recordList = new ArrayList<>(acList.size()); + // E8授权门 + AuthDoorDeviceFindRes authDoor = null; for (SisAccessControlVo sisAccessControlVo : acList) { if (sisAccessControlVo.getControlType() != 1 && sisAccessControlVo.getAccessType() != 2) { - SisAuthRecord authRecord = new SisAuthRecord(); - CustomerAuthAddReq.AuthGroupData door = new CustomerAuthAddReq.AuthGroupData(); - door.setType(0); - door.setGatewayType(1); - Long id = Long.parseLong(sisAccessControlVo.getOutCode()); - door.setId(id); - authRecord.setDoorId(id); - // 如果 authDoorMap 中存在对应的 deviceId,则更新 id - AuthDoorDeviceFindRes authDoorRes = authDoorMap.get(id); - if (authDoorRes != null) { - door.setId(authDoorRes.getId()); - authRecord.setDeviceId(authDoorRes.getDeviceId()); + // 通过门禁ID匹配授权门 + authDoor = authDoorList.stream().filter(item -> item.getDeviceId() == Long.parseLong(sisAccessControlVo.getOutCode())).findFirst().orElse(null); + + if (authDoor != null) { + CustomerAuthAddReq.AuthGroupData door = new CustomerAuthAddReq.AuthGroupData(); + door.setType(0); + door.setGatewayType(1); + // E8授权传入ID为门ID,非门禁ID + door.setId(authDoor.getId()); + authList.add(door); + + SisAuthRecord authRecord = new SisAuthRecord(); + authRecord.setDoorId(authDoor.getId()); + authRecord.setDeviceId(authDoor.getDeviceId()); + authRecord.setLibId(imgVo.getLibId()); + authRecord.setImgId(imgVo.getId()); + authRecord.setAcId(sisAccessControlVo.getId()); + recordList.add(authRecord); } - authRecord.setLibId(imgVo.getLibId()); - authRecord.setImgId(imgVo.getId()); - authRecord.setAcId(sisAccessControlVo.getId()); - recordList.add(authRecord); } }