From abeac0c7c7218e70cc2ed12485e644b413bac82b Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sun, 29 Jun 2025 16:19:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor(sis):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=8E=88=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SisAuthRecordController.java | 4 +- .../e8/VoucherControlController.java | 4 +- .../org/dromara/sis/domain/SisAuthRecord.java | 11 +- .../sis/domain/SisLibDeviceImgRef.java | 5 - .../sis/domain/bo/SisAuthRecordBo.java | 20 +- .../sis/domain/bo/SisLibDeviceImgRefBo.java | 5 - .../sis/domain/vo/SisAuthRecordVo.java | 18 +- .../sis/domain/vo/SisLibDeviceImgRefVo.java | 6 - .../sis/sdk/e8/VoucherControlService.java | 2 +- .../domain/voucher/res/IssueVoucherRes.java | 14 ++ .../e8/impl/VoucherControlServiceImpl.java | 13 +- .../sis/service/ISisAccessControlService.java | 10 +- .../sis/service/ISisPersonLibImgService.java | 10 +- .../impl/SisAccessControlServiceImpl.java | 13 +- .../impl/SisAuthRecordServiceImpl.java | 190 ++++++++++-------- .../service/impl/SisEEightRefServiceImpl.java | 12 +- .../impl/SisPersonLibImgServiceImpl.java | 11 + 17 files changed, 215 insertions(+), 133 deletions(-) create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/voucher/res/IssueVoucherRes.java diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java index 1537f74..5f632f6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/SisAuthRecordController.java @@ -27,7 +27,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; * 前端访问路由地址为:/sis/authRecord * * @author lsm - * @date 2025-06-28 + * @since 2025-06-28 */ @Validated @RequiredArgsConstructor @@ -75,7 +75,7 @@ public class SisAuthRecordController extends BaseController { @SaCheckPermission("sis:authRecord:add") @Log(title = "授权记录", businessType = BusinessType.INSERT) @RepeatSubmit() - @PostMapping() + @PostMapping("/add") public R add(@Validated(AddGroup.class) @RequestBody SisAuthRecordBo bo) { return toAjax(sisAuthRecordService.insertByBo(bo)); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/VoucherControlController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/VoucherControlController.java index 5b1ad5a..dc12c60 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/VoucherControlController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/e8/VoucherControlController.java @@ -35,9 +35,9 @@ public class VoucherControlController { public R issueVoucher(@RequestBody IssueVoucherReq req) { log.info("E8发行凭证入参:{}", req); - Boolean flag = voucherControlService.issueVoucher(req); + Long flag = voucherControlService.issueVoucher(req); - if (flag) { + if (flag != null) { return R.ok(); } else { return R.fail("E8发行凭证,调用失败!"); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthRecord.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthRecord.java index edeeb04..8ae79a6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthRecord.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAuthRecord.java @@ -28,19 +28,24 @@ public class SisAuthRecord extends TenantEntity { private Long id; /** - * 人像id + * 图像库id + */ + private Long libId; + + /** + * 图片id */ private Long imgId; /** * 门禁id */ - private String acId; + private Long acId; /** * 设备id */ - private String eqbId; + private Long eqbId; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibDeviceImgRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibDeviceImgRef.java index b276d1f..da57319 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibDeviceImgRef.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisLibDeviceImgRef.java @@ -52,9 +52,4 @@ public class SisLibDeviceImgRef extends TenantEntity { */ private Long eqpLibImgId; - /** - * e8图片地址 - */ - private String eqpLibImgUrl; - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java index 83435d7..8e70610 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAuthRecordBo.java @@ -29,22 +29,20 @@ public class SisAuthRecordBo extends BaseEntity { private Long id; /** - * 人像id + * 图像库Id */ - @NotNull(message = "图像id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long imgId; + @NotNull(message = "图像库Id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long libId; + + /** + * 图像id列表 + */ + @NotNull(message = "图像id列表不能为空", groups = {AddGroup.class, EditGroup.class}) + private List imgIds; /** * 门禁id列表 */ @NotNull(message = "门禁id列表能为空", groups = {AddGroup.class, EditGroup.class}) private List acIds; - - /** - * 设备id列表 - */ - @NotNull(message = "设备id列表不能为空", groups = {AddGroup.class, EditGroup.class}) - private List eqbIds; - - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibDeviceImgRefBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibDeviceImgRefBo.java index 2c4acc1..1d05bf2 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibDeviceImgRefBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisLibDeviceImgRefBo.java @@ -56,9 +56,4 @@ public class SisLibDeviceImgRefBo extends BaseEntity { @NotNull(message = "设备库图片id不能为空", groups = { AddGroup.class, EditGroup.class }) private Long eqpLibImgId; - /** - * e8图片地址 - */ - private String eqpLibImgUrl; - } 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 a05d17a..b835cbb 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 @@ -31,6 +31,12 @@ public class SisAuthRecordVo implements Serializable { @ExcelProperty(value = "主键id") private Long id; + /** + * 图像库Id + */ + @ExcelProperty(value = "图像库Id") + private Long libId; + /** * 人像id */ @@ -38,16 +44,16 @@ public class SisAuthRecordVo implements Serializable { private Long imgId; /** - * 门禁id列表 + * 门禁id */ - @ExcelProperty(value = "门禁id列表") - private List acIds; + @ExcelProperty(value = "门禁id") + private Long acId; /** - * 设备id列表 + * 设备id */ - @ExcelProperty(value = "设备id列表") - private List eqbIds; + @ExcelProperty(value = "设备id") + private Long eqbId; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibDeviceImgRefVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibDeviceImgRefVo.java index 247a3a8..74e2945 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibDeviceImgRefVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisLibDeviceImgRefVo.java @@ -60,10 +60,4 @@ public class SisLibDeviceImgRefVo implements Serializable { @ExcelProperty(value = "设备库图片id") private Long eqpLibImgId; - /** - * e8图片地址 - */ - @ExcelProperty(value = "e8图片地址") - private String eqpLibImgUrl; - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/VoucherControlService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/VoucherControlService.java index 73fc0b4..c1e5972 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/VoucherControlService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/VoucherControlService.java @@ -17,7 +17,7 @@ public interface VoucherControlService { * @param req 凭证数据 * @return Boolean */ - Boolean issueVoucher(IssueVoucherReq req); + Long issueVoucher(IssueVoucherReq req); /** * 操作凭证 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/voucher/res/IssueVoucherRes.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/voucher/res/IssueVoucherRes.java new file mode 100644 index 0000000..010a89a --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/voucher/res/IssueVoucherRes.java @@ -0,0 +1,14 @@ +package org.dromara.sis.sdk.e8.domain.voucher.res; + +import lombok.Data; + +/** + * @author lsm + * @apiNote IssueVoucherRes + * @since 2025/6/29 + */ +@Data +public class IssueVoucherRes { + + private Long id; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/VoucherControlServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/VoucherControlServiceImpl.java index df36201..a87494c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/VoucherControlServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/VoucherControlServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.sis.sdk.e8.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.json.JSONUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.sis.sdk.e8.VoucherControlService; @@ -8,6 +9,7 @@ import org.dromara.sis.sdk.e8.domain.ApiResp; import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq; import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq; +import org.dromara.sis.sdk.e8.domain.voucher.res.IssueVoucherRes; import org.dromara.sis.sdk.e8.utils.E8ApiUtil; import org.springframework.stereotype.Service; @@ -37,16 +39,21 @@ public class VoucherControlServiceImpl implements VoucherControlService { * @return 是否成功 */ @Override - public Boolean issueVoucher(IssueVoucherReq req) { + public Long issueVoucher(IssueVoucherReq req) { // 封装入参 Map params = BeanUtil.beanToMap(req); // 调用API ApiResp apiResp = e8ApiUtil.doPost(params, ISSUANCE_VOUCHER); - if (!apiResp.getSuccess()) log.error("E8发行凭证失败,errorMsg:{}", apiResp); + if (!apiResp.getSuccess()) { + log.error("E8发行凭证失败,errorMsg:{}", apiResp); + return null; + } - return apiResp.getSuccess(); + IssueVoucherRes res = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), IssueVoucherRes.class); + + return res.getId(); } /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java index 3bff785..e93e8f6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAccessControlService.java @@ -13,7 +13,7 @@ import java.util.List; * 门禁设备Service接口 * * @author lxj - * @date 2025-06-25 + * @since 2025-06-25 */ public interface ISisAccessControlService { @@ -66,4 +66,12 @@ public interface ISisAccessControlService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据查询列表 + * + * @param ids 门禁id + * @return 列表 + */ + List queryListByIds(Collection ids); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisPersonLibImgService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisPersonLibImgService.java index 429f9e4..8926a3e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisPersonLibImgService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisPersonLibImgService.java @@ -12,7 +12,7 @@ import java.util.List; * 人像信息Service接口 * * @author mocheng - * @date 2025-06-24 + * @since 2025-06-24 */ public interface ISisPersonLibImgService { @@ -65,4 +65,12 @@ public interface ISisPersonLibImgService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 根据查询列表 + * + * @param ids 图片id + * @return 列表 + */ + List queryListByIds(Collection ids); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java index bcc9f1a..81be8de 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAccessControlServiceImpl.java @@ -140,7 +140,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { // 通讯类型 e8DoorReq.setCommType(0); // cpuid - e8DoorReq.setCpuID(add.getFactoryCode()); + e8DoorReq.setCpuID(""); // ip e8DoorReq.setIp(add.getAccessIp()); // 端口 @@ -207,4 +207,15 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { } return baseMapper.deleteByIds(ids) > 0; } + + /** + * 根据查询列表 + * + * @param ids 门禁id + * @return 列表 + */ + @Override + public List queryListByIds(Collection ids){ + return baseMapper.selectVoByIds(ids); + } } 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 c10f24b..1f0cd0c 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 @@ -2,7 +2,6 @@ package org.dromara.sis.service.impl; import cn.hutool.core.lang.Assert; import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -10,6 +9,7 @@ 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.bo.SisEEightRefBo; import org.dromara.sis.domain.bo.SisLibDeviceImgRefBo; import org.dromara.sis.domain.bo.SisLibDeviceRefBo; import org.dromara.sis.domain.vo.*; @@ -29,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; +import java.util.stream.Collectors; /** * 授权记录Service业务层处理 @@ -43,9 +44,10 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { private final UnViewAiBoxApi unViewAiBoxApi; private final SisAuthRecordMapper baseMapper; - private final VoucherControlService vouchService; + private final VoucherControlService e8VouchService; private final ISisPersonLibService sisPersonLibService; - private final AccessControlService accessControlService; + private final ISisEEightRefService sisEEightRefService; + private final AccessControlService e8AccessControlService; private final ISisPersonLibImgService sisPersonLibImgService; private final ISisLibDeviceRefService sisLibDeviceRefService; private final ISisAccessControlService sisAccessControlService; @@ -60,14 +62,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { */ @Override public SisAuthRecordVo queryById(Long id) { - SisAuthRecord sisAuthRecord = baseMapper.selectById(id); - if (sisAuthRecord == null) return null; - List acIds = Arrays.stream(sisAuthRecord.getAcId().split(",")).map(Long::parseLong).toList(); - List eqbIds = Arrays.stream(sisAuthRecord.getEqbId().split(",")).map(Long::parseLong).toList(); - SisAuthRecordVo vo = MapstructUtils.convert(sisAuthRecord, SisAuthRecordVo.class); - vo.setAcIds(acIds); - vo.setEqbIds(eqbIds); - return vo; + return baseMapper.selectVoById(id); } /** @@ -79,7 +74,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { */ @Override public TableDataInfo queryPageList(SisAuthRecordBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -100,7 +95,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(SisAuthRecord::getId); - lqw.eq(bo.getImgId() != null, SisAuthRecord::getImgId, bo.getImgId()); + lqw.eq(bo.getLibId() != null, SisAuthRecord::getLibId, bo.getLibId()); return lqw; } @@ -113,32 +108,49 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { @Override @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisAuthRecordBo bo) { - SisAuthRecord add = MapstructUtils.convert(bo, SisAuthRecord.class); - Assert.notNull(add, "数据处理失败"); - add.setAcId(StringUtils.join(bo.getAcIds(), ",")); - add.setEqbId(StringUtils.join(bo.getEqbIds(), ",")); - boolean flag = baseMapper.insert(add) > 0; - log.info("图片{},开始对{}门禁授权,下发{}设备照片", add.getImgId(), bo.getAcIds(), bo.getEqbIds()); - if (flag) { - SisPersonLibImgVo imgVo = sisPersonLibImgService.queryById(bo.getImgId()); - Assert.notNull(imgVo, "图片不存在,id=" + bo.getImgId()); - - SisPersonLibVo libVo = sisPersonLibService.queryById(imgVo.getLibId()); - Assert.notNull(libVo, "图像库不存在,id=" + imgVo.getLibId()); + List refVos = sisLibDeviceRefService.queryByLibIds(Collections.singleton(bo.getLibId())); + Assert.notEmpty(refVos, "图像库与设备关联关系不存在"); + List eqpIds = refVos.stream().map(SisLibDeviceRefVo::getEqpId).toList(); - try { - long eqp_lib_id; - Integer eqp_lib_img_id; - String eqp_lib_img_url; - byte[] imageByte = Files.readAllBytes(Paths.get(imgVo.getImgUrl())); + boolean flag = false; + log.info("开始写入授权记录,图片:{}、门禁:{}、设备:{}", bo.getImgIds(), bo.getAcIds(), eqpIds); + for (Long imgId : bo.getImgIds()) { + for (Long acId : bo.getAcIds()) { + for (Long eqpId : eqpIds) { + SisAuthRecord add = MapstructUtils.convert(bo, SisAuthRecord.class); + Assert.notNull(add, "数据处理失败"); + add.setAcId(acId); + add.setImgId(imgId); + add.setEqbId(eqpId); + flag = baseMapper.insert(add) > 0; + Assert.isTrue(flag, "授权记录写入失败"); + } + } + } + log.info("授权记录写入完成"); + + SisPersonLibVo libVo = sisPersonLibService.queryById(bo.getLibId()); + Assert.notNull(libVo, "图像库不存在,id=" + (bo.getLibId())); + + List imgList = sisPersonLibImgService.queryListByIds(bo.getImgIds()); + Assert.notEmpty(imgList, "图片不存在"); + + 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())); - // TODO 图片开始下发到宇视盒子 - log.info("图片开始下发到宇视盒子"); - for (Long eqpId : bo.getEqbIds()) { SisAccessControlDeviceVo vo = sisAccessControlDeviceService.queryById(eqpId); Assert.notNull(vo, "门禁控制设备不存在,id=" + eqpId); - log.info(libVo.getLibType() == 1 ? "准备写入门禁设备,code={}" : "准备写入工服设备,code={}", vo.getEqpNo()); + log.info(libVo.getLibType() == 1 ? "准备写入人像设备,code={}" : "准备写入工服设备,code={}", vo.getEqpNo()); UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo(); systemInfo.setAccount(vo.getEqpAccount()); @@ -179,59 +191,79 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { SisLibDeviceImgRefBo ref = new SisLibDeviceImgRefBo(); ref.setLibId(libVo.getId()); - ref.setImgId(add.getId()); + ref.setImgId(imgVo.getId()); ref.setEqpId(eqpId); ref.setEqpLibId(eqp_lib_id); ref.setEqpLibImgId(eqp_lib_img_id.longValue()); Boolean insert = sisLibDeviceImgRefService.insertByBo(ref); Assert.isTrue(insert, "写入图片关联关系表失败!"); + } - log.info("图片开始下发完成!"); - - // TODO 对门禁设备授权 - log.info("图片开始对门禁设备授权"); - for (Long acId : bo.getAcIds()) { - SisAccessControlVo acVo = sisAccessControlService.queryById(acId); - Assert.notNull(acVo, "门禁设备不存在"); - - // TODO 阶段调试E8人脸设备,非E8人脸设备不处理 - if (acVo.getControlType() == 1 || acVo.getAccessType() == 2) continue; - - log.info("照片上传E8平台,id=" + bo.getImgId()); - String url = vouchService.uploadFace(imageByte); - Assert.notNull(url, "图片上传E8平台失败"); - eqp_lib_img_url = url; - - log.info("E8平台发行凭证"); - IssueVoucherReq req = new IssueVoucherReq(); - req.setCardType(34); - req.setVoucherType(70); - // TODO 临时默认人员 - req.setPersonID(539696740646981L); - req.setTxtData(eqp_lib_img_url); - Boolean issue = vouchService.issueVoucher(req); - Assert.isTrue(issue, "E8平台发行凭证失败"); - - log.info("E8平台授权"); - CustomerAuthAddReq authReq = new CustomerAuthAddReq(); - authReq.setAuthType(0); - authReq.setScheduleId(1L); - authReq.setPersonIds(Collections.singletonList(539696740646981L)); - authReq.setStartTime("2025-06-25 11: 23: 39"); - authReq.setEndTime("2025-07-25 11: 23: 39"); - - CustomerAuthAddReq.AuthGroupData authGroupData = new CustomerAuthAddReq.AuthGroupData(); - authGroupData.setId(Long.parseLong(acVo.getOutCode())); - authGroupData.setType(1); - authReq.setAuthData(List.of(authGroupData)); - Boolean auth = accessControlService.addCustomerAuth(authReq); - Assert.isTrue(auth, "E8平台授权失败"); - } - log.info("门禁设备授权完成"); - } catch (Exception e) { - throw new RuntimeException(e.getMessage()); } + log.info("图片开始下发完成!"); + + log.info("开始写入E8平台,图片:{}、门禁:{}", bo.getImgIds(), bo.getAcIds()); + for (SisPersonLibImgVo imgVo : imgList) { + byte[] imageByte = Files.readAllBytes(Paths.get(imgVo.getImgUrl())); + + log.info("E8平台上传图片,{}", imgVo.getId()); + String url = e8VouchService.uploadFace(imageByte); + Assert.notNull(url, "E8平台上传图片失败"); + log.info("E8平台上传图片完成!"); + + log.info("E8平台发行凭证"); + IssueVoucherReq req = new IssueVoucherReq(); + // 34:普通用户卡 + req.setCardType(34); + // 70:人脸凭证 + req.setVoucherType(70); + // TODO 临时默认人员 + req.setPersonID(539696740646981L); + req.setTxtData(url); + Long vId = e8VouchService.issueVoucher(req); + Assert.notNull(vId, "E8平台发行凭证失败"); + log.info("E8平台发行凭证完成!"); + + + log.info("E8平台授权凭证"); + List authList = acList.stream() + // TODO 阶段调试E8人脸设备,非E8且非人脸设备不处理 + .filter(acVo -> acVo.getControlType() != 1 && acVo.getAccessType() != 2) + .map(acVo -> { + CustomerAuthAddReq.AuthGroupData auth = new CustomerAuthAddReq.AuthGroupData(); + auth.setType(0); + auth.setGatewayType(1); + auth.setId(Long.parseLong(acVo.getAccessCode())); + return auth; + }).toList(); + + CustomerAuthAddReq authReq = new CustomerAuthAddReq(); + authReq.setAuthType(0); + authReq.setScheduleId(1L); + authReq.setPersonIds(Collections.singletonList(539696740646981L)); + authReq.setStartTime("2025-06-25 11: 23: 39"); + authReq.setEndTime("2025-07-25 11: 23: 39"); + authReq.setAuthData(authList); + Boolean auth = e8AccessControlService.addCustomerAuth(authReq); + Assert.isTrue(auth, "E8平台授权失败"); + log.info("E8平台授权完成!"); + + SisEEightRefBo ref = new SisEEightRefBo(); + ref.setUserId(1L); + ref.setRemoteImgUrl(url); + ref.setRemoteVoucherId(vId); + ref.setAcIds(bo.getAcIds()); + ref.setRemoteUserId(539696740646981L); + ref.setImgId(imgVo.getId()); + Boolean insert = sisEEightRefService.insertByBo(ref); + Assert.isTrue(insert, "写入E8关联关系表失败!"); + } + log.info("写入E8平台完成!"); + + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); } + return flag; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisEEightRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisEEightRefServiceImpl.java index e32df4c..66c9070 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisEEightRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisEEightRefServiceImpl.java @@ -15,6 +15,7 @@ import org.dromara.sis.domain.vo.SisEEightRefVo; import org.dromara.sis.domain.SisEEightRef; import org.dromara.sis.mapper.SisEEightRefMapper; import org.dromara.sis.service.ISisEEightRefService; +import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; @@ -25,7 +26,7 @@ import java.util.Collection; * E8平台对应关系Service业务层处理 * * @author lsm - * @date 2025-06-29 + * @since 2025-06-29 */ @Slf4j @RequiredArgsConstructor @@ -97,14 +98,11 @@ public class SisEEightRefServiceImpl implements ISisEEightRefService { * @return 是否新增成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisEEightRefBo bo) { SisEEightRef add = MapstructUtils.convert(bo, SisEEightRef.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; + add.setAcId(StringUtils.join(bo.getAcIds(), ",")); + return baseMapper.insert(add) > 0; } /** 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 8d8c2a8..9d4ca82 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 @@ -173,4 +173,15 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { return true; } + + /** + * 查询列表 + * + * @param Ids 图片id + * @return 列表 + */ + @Override + public List queryListByIds(Collection Ids) { + return baseMapper.selectVoByIds(Ids); + } } From 116abb4113b92fdec69ab75065f78768aae67144 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sun, 29 Jun 2025 17:17:02 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(sis):=20E8=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sis/sdk/e8/DoorDeviceService.java | 10 ++++++ .../door/res/AuthDoorDeviceFindRes.java | 22 +++++++++++++ .../sdk/e8/impl/DoorDeviceServiceImpl.java | 33 +++++++++++++++++++ .../impl/SisAuthRecordServiceImpl.java | 26 +++++++++++---- 4 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/DoorDeviceService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/DoorDeviceService.java index aa70d85..6a6e717 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/DoorDeviceService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/DoorDeviceService.java @@ -3,10 +3,13 @@ package org.dromara.sis.sdk.e8; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceAddReq; import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceUpdateReq; +import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes; import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes; import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceFindRes; import org.dromara.sis.sdk.e8.domain.QueryDto; +import java.util.List; + /** * @author lsm * @apiNote DoorDeviceService @@ -53,4 +56,11 @@ public interface DoorDeviceService { * @return Boolean */ Boolean deleteDoorDevice(Integer id); + + /** + * 分页获取授权门信息 + * + * @return TableDataInfo + */ + List getPageAuthDoorDeviceList(); } 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 new file mode 100644 index 0000000..f2cf2d6 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/door/res/AuthDoorDeviceFindRes.java @@ -0,0 +1,22 @@ +package org.dromara.sis.sdk.e8.domain.door.res; + +import lombok.Data; + +/** + * @author lsm + * @apiNote AuthDoorDeviceFindRes + * @since 2025/6/29 + */ +@Data +public class AuthDoorDeviceFindRes { + + /** + * id + */ + private Long id; + + /** + * deviceId + */ + private Long deviceId; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/DoorDeviceServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/DoorDeviceServiceImpl.java index 060151c..b299a09 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/DoorDeviceServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/impl/DoorDeviceServiceImpl.java @@ -11,6 +11,7 @@ import org.dromara.sis.sdk.e8.domain.ApiResp; import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceAddReq; import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceFindReq; import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceUpdateReq; +import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes; import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes; import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceFindRes; import org.dromara.sis.sdk.e8.domain.QueryDto; @@ -18,6 +19,7 @@ import org.dromara.sis.sdk.e8.utils.E8ApiUtil; import org.springframework.stereotype.Service; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -35,6 +37,7 @@ public class DoorDeviceServiceImpl implements DoorDeviceService { private final static String DOOR_DEVICE_CREATE = "/api/E8Door/man-device-info"; private final static String DOOR_DEVICE_UPDATE = "/api/E8Door/man-device-info/{id}/update"; private final static String DOOR_DEVICE_DELETE = "/api/E8Door/man-device-info/{id}"; + private final static String AUTH_DOOR_DEVICE_GET_LIST = "/api/E8Door/man-auth-info/get-page-list-auth-data"; private final E8ApiUtil e8ApiUtil; @@ -170,4 +173,34 @@ public class DoorDeviceServiceImpl implements DoorDeviceService { return apiResp.getSuccess(); } + /** + * 分页获取授权门信息 + * + * @return TableDataInfo + */ + public List getPageAuthDoorDeviceList() { + Map queryDto = new HashMap<>(); + queryDto.put("type", -1); + queryDto.put("matchString", ""); + + // 创建一个参数映射,用于存储API请求所需的参数 + Map params = new HashMap<>(); + params.put("PageIndex", 1); + params.put("MaxResultCount", 100000); + params.put("QueryDto", queryDto); + + ApiResp apiResp = e8ApiUtil.doPost(params, AUTH_DOOR_DEVICE_GET_LIST); + + // 如果API调用不成功,则返回null + if (!apiResp.getSuccess()) { + log.error("分页获取授权门信息失败 errorMsg:{}", apiResp); + // 如果响应不成功,则返回null + return null; + } + // 将API响应结果转换为Map对象,以便后续处理 + Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { + }, false); + // 返回list + return JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), AuthDoorDeviceFindRes.class); + } } 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 1f0cd0c..52a3a4c 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 @@ -14,8 +14,10 @@ import org.dromara.sis.domain.bo.SisLibDeviceImgRefBo; import org.dromara.sis.domain.bo.SisLibDeviceRefBo; import org.dromara.sis.domain.vo.*; import org.dromara.sis.sdk.e8.AccessControlService; +import org.dromara.sis.sdk.e8.DoorDeviceService; import org.dromara.sis.sdk.e8.VoucherControlService; import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq; +import org.dromara.sis.sdk.e8.domain.door.res.AuthDoorDeviceFindRes; import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; import org.dromara.sis.sdk.unview.UnViewAiBoxApi; import org.dromara.sis.sdk.unview.model.UvModel; @@ -45,6 +47,7 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { private final UnViewAiBoxApi unViewAiBoxApi; private final SisAuthRecordMapper baseMapper; private final VoucherControlService e8VouchService; + private final DoorDeviceService e8DoorDeviceService; private final ISisPersonLibService sisPersonLibService; private final ISisEEightRefService sisEEightRefService; private final AccessControlService e8AccessControlService; @@ -224,17 +227,26 @@ public class SisAuthRecordServiceImpl implements ISisAuthRecordService { Assert.notNull(vId, "E8平台发行凭证失败"); log.info("E8平台发行凭证完成!"); - log.info("E8平台授权凭证"); + // E8平台授权门列表 + List authDoor = e8DoorDeviceService.getPageAuthDoorDeviceList(); + Map authDoorMap = authDoor.stream() + .collect(Collectors.toMap(AuthDoorDeviceFindRes::getDeviceId, authDoorRes -> authDoorRes)); + List authList = acList.stream() - // TODO 阶段调试E8人脸设备,非E8且非人脸设备不处理 .filter(acVo -> acVo.getControlType() != 1 && acVo.getAccessType() != 2) .map(acVo -> { - CustomerAuthAddReq.AuthGroupData auth = new CustomerAuthAddReq.AuthGroupData(); - auth.setType(0); - auth.setGatewayType(1); - auth.setId(Long.parseLong(acVo.getAccessCode())); - return auth; + CustomerAuthAddReq.AuthGroupData door = new CustomerAuthAddReq.AuthGroupData(); + door.setType(0); + door.setGatewayType(1); + Long id = Long.parseLong(acVo.getOutCode()); + door.setId(id); + // 如果 authDoorMap 中存在对应的 deviceId,则更新 id + AuthDoorDeviceFindRes authDoorRes = authDoorMap.get(id); + if (authDoorRes != null) { + door.setId(authDoorRes.getId()); + } + return door; }).toList(); CustomerAuthAddReq authReq = new CustomerAuthAddReq();