From 3560c80c4165ed43d5e7634ac6313d14b7b263f0 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Sat, 28 Jun 2025 10:23:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(sis):=20=20-=20=E4=BF=AE=E6=94=B9=E4=BA=BA?= =?UTF-8?q?=E5=83=8F=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sis/sdk/unview/UnViewAiBoxApi.java | 2 +- .../unview/service/UnViewAiBoxApiService.java | 4 +- .../impl/SisAccessControlServiceImpl.java | 76 ++++++------ .../impl/SisPersonLibImgServiceImpl.java | 114 +++++++++++------- 4 files changed, 112 insertions(+), 84 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/UnViewAiBoxApi.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/UnViewAiBoxApi.java index 5b2f338..5b39585 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/UnViewAiBoxApi.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/UnViewAiBoxApi.java @@ -220,7 +220,7 @@ public interface UnViewAiBoxApi { * @param imageBase64 工服图片base64 * @return 返回工服的人员id */ - Integer addWorkClothes(UvSystemInfo systemInfo, Integer libId, String imageBase64); + WorkClothesInfo addWorkClothes(UvSystemInfo systemInfo, Integer libId, String imageBase64); /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/UnViewAiBoxApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/UnViewAiBoxApiService.java index 59d1be0..186fc6e 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/UnViewAiBoxApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/unview/service/UnViewAiBoxApiService.java @@ -218,11 +218,11 @@ public class UnViewAiBoxApiService implements UnViewAiBoxApi { /*--------------------------------------------------------------------工服 ---------------------------------------------------------------------------*/ @Override - public Integer addWorkClothes(UvSystemInfo uvSystemInfo, Integer libId, String imageBase64) { + public WorkClothesInfo addWorkClothes(UvSystemInfo uvSystemInfo, Integer libId, String imageBase64) { JSONObject params = new JSONObject(); params.put("lib_id", libId); params.put("image_base64", imageBase64); - UniViewResult request = uniViewHttp.request(uvSystemInfo, UniViewApiEnum.WORK_CLOTHES_ADD, params, Integer.class); + UniViewResult request = uniViewHttp.request(uvSystemInfo, UniViewApiEnum.WORK_CLOTHES_ADD, params, WorkClothesInfo.class); return request.result(); } 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 a45615f..c50a818 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 @@ -1,5 +1,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; @@ -10,16 +11,19 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.sis.domain.SisDeviceManage; +import org.dromara.sis.domain.bo.SisDeviceManageBo; import org.dromara.sis.mapper.SisDeviceManageMapper; import org.dromara.sis.sdk.e8.DoorDeviceService; import org.dromara.sis.sdk.e8.domain.door.req.DoorDeviceAddReq; import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes; +import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.stereotype.Service; import org.dromara.sis.domain.bo.SisAccessControlBo; import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.sis.domain.SisAccessControl; import org.dromara.sis.mapper.SisAccessControlMapper; import org.dromara.sis.service.ISisAccessControlService; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; @@ -38,7 +42,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { private final SisAccessControlMapper baseMapper; private final DoorDeviceService doorDeviceService; - private final SisDeviceManageMapper sisDeviceManageMapper; + private final ISisDeviceManageService sisDeviceManageService; /** * 查询门禁设备 @@ -103,49 +107,51 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService { * @return 是否新增成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisAccessControlBo bo) { SisAccessControl add = MapstructUtils.convert(bo, SisAccessControl.class); - validEntityBeforeSave(add); - - // 添加E8门禁设备 - if (add.getControlType() == 2L){ - DoorDeviceAddReq e8DoorReq = new DoorDeviceAddReq(); - // 设备类型 - e8DoorReq.setType(add.getAccessType()); - // 设备名称 - e8DoorReq.setName(add.getAccessName()); - // 通讯类型 - e8DoorReq.setCommType(0); - // cpuid - e8DoorReq.setCpuID(add.getFactoryCode()); - // ip - e8DoorReq.setIp(add.getAccessIp()); - // 端口 - e8DoorReq.setPort(add.getAccessPort()); - // 网关ip - e8DoorReq.setGatewayIP(""); - // 子网掩码 - e8DoorReq.setNetMask("255.255.255.0"); - - DoorDeviceAddRes e8DoorRes = doorDeviceService.addDoorDevice(e8DoorReq); - - if (e8DoorRes != null) { - add.setOutCode(e8DoorRes.getId().toString()); - } else { - return false; - } - } - + Assert.notNull(add, "数据处理失败"); boolean flag = baseMapper.insert(add) > 0; if (flag) { - bo.setId(add.getId()); + // 添加E8门禁设备 + if (add.getControlType() == 2L){ + log.info("开始同步写入E8门禁"); + DoorDeviceAddReq e8DoorReq = new DoorDeviceAddReq(); + // 设备类型 + e8DoorReq.setType(add.getAccessType()); + // 设备名称 + e8DoorReq.setName(add.getAccessName()); + // 通讯类型 + e8DoorReq.setCommType(0); + // cpuid + e8DoorReq.setCpuID(add.getFactoryCode()); + // ip + e8DoorReq.setIp(add.getAccessIp()); + // 端口 + e8DoorReq.setPort(add.getAccessPort()); + // 网关ip + e8DoorReq.setGatewayIP(""); + // 子网掩码 + e8DoorReq.setNetMask("255.255.255.0"); + + DoorDeviceAddRes e8DoorRes = doorDeviceService.addDoorDevice(e8DoorReq); + Assert.notNull(e8DoorRes, "写入E8平台失败"); + + log.info("E8平台写入成功,将返回值:{},回写到{}门禁中!",e8DoorRes.getId(),add.getAccessName()); + SisAccessControlBo wbBo = new SisAccessControlBo(); + wbBo.setId(add.getId()); + wbBo.setOutCode(e8DoorRes.getId().toString()); + Boolean update = this.updateByBo(wbBo); + Assert.isTrue(update, "外部编码回写失败"); + log.info("E8平台写入完成!"); + } // 判断是否绑定摄像头 if (bo.getDeviceId() != null){ - SisDeviceManage device = new SisDeviceManage(); + SisDeviceManageBo device = new SisDeviceManageBo(); device.setId(bo.getDeviceId()); device.setAccessControlId(add.getId()); - sisDeviceManageMapper.updateById(device); + sisDeviceManageService.updateByBo(device); } } return flag; 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 7b2f2d1..db29812 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 @@ -22,6 +22,7 @@ import org.dromara.sis.sdk.unview.UnViewAiBoxApi; import org.dromara.sis.sdk.unview.model.UvModel; import org.dromara.sis.service.*; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.nio.file.Files; import java.nio.file.Paths; @@ -107,6 +108,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { * @return 是否新增成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(SisPersonLibImgBo bo) { SisPersonLibImg add = MapstructUtils.convert(bo, SisPersonLibImg.class); Assert.notNull(add, "数据处理失败"); @@ -116,10 +118,13 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { if (flag) { // 获取人像库关联设备Id SisPersonLibVo libVo = sisPersonLibService.queryById(bo.getLibId()); - Assert.notNull(libVo, "人像库不存在,id=" + bo.getLibId()); - try { + if (libVo.getLibType() == 1L) { + Assert.notNull(libVo, "人像库不存在,id=" + bo.getLibId()); + } else { + Assert.notNull(libVo, "工服库不存在,id=" + bo.getLibId()); + } - long eqp_id; + try { long eqp_lib_id; Integer eqp_lib_img_id; String eqp_lib_img_url = null; @@ -129,7 +134,11 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { // 查询设备信息 SisAccessControlDeviceVo vo = sisAccessControlDeviceService.queryById(eqpId); Assert.notNull(vo, "门禁控制设备不存在,id=" + eqpId); - log.info("准备写入{}门禁设备人像库", vo.getEqpNo()); + if (libVo.getLibType() == 1) { + log.info("准备写入{}门禁设备人像库", vo.getEqpNo()); + } else { + log.info("准备写入{}门禁设备工服库", vo.getEqpNo()); + } UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo(); systemInfo.setAccount(vo.getEqpAccount()); @@ -144,23 +153,29 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { List refVo = libDeviceRefService.queryList(refBo); Assert.notNull(refVo, "系统库与设备库关联关系不存在!libId:{},eqpId:{}", bo.getLibId(), eqpId); eqp_lib_id = refVo.get(0).getEqpLibId(); - // 宇视添加人像 - UvModel.AddPersonParams addPersonParams = new UvModel.AddPersonParams(); - addPersonParams.setPerson_name(bo.getImgName()); - addPersonParams.setImage_base64(Base64.getEncoder().encodeToString(imageByte)); - addPersonParams.setLib_id(Math.toIntExact(eqp_lib_id)); - addPersonParams.setSex(bo.getSex()); - addPersonParams.setEmail(bo.getEmail()); - addPersonParams.setTel(bo.getTel()); - addPersonParams.setCertificate_type(bo.getCertificateType()); - addPersonParams.setCertificate_no(bo.getCertificateNo()); - addPersonParams.setBirth_date(bo.getBirthDate()); - // 发起请求获取响应 - UvModel.AddPersonResult addPersonResult = unViewAiBoxApi.addPerson(systemInfo, addPersonParams); - Assert.notNull(addPersonResult, "图片上传宇视盒子失败"); - eqp_lib_img_id = addPersonResult.getPerson_id(); + if (libVo.getLibType() == 1) { + // 宇视添加人像 + UvModel.AddPersonParams addPersonParams = new UvModel.AddPersonParams(); + addPersonParams.setPerson_name(bo.getImgName()); + addPersonParams.setImage_base64(Base64.getEncoder().encodeToString(imageByte)); + addPersonParams.setLib_id(Math.toIntExact(eqp_lib_id)); + addPersonParams.setSex(bo.getSex()); + addPersonParams.setEmail(bo.getEmail()); + addPersonParams.setTel(bo.getTel()); + addPersonParams.setCertificate_type(bo.getCertificateType()); + addPersonParams.setCertificate_no(bo.getCertificateNo()); + addPersonParams.setBirth_date(bo.getBirthDate()); + // 发起请求获取响应 + UvModel.AddPersonResult addResult = unViewAiBoxApi.addPerson(systemInfo, addPersonParams); + eqp_lib_img_id = addResult.getPerson_id(); + } else { + UvModel.WorkClothesInfo addResult = unViewAiBoxApi.addWorkClothes(systemInfo, Math.toIntExact(eqp_lib_id), Base64.getEncoder().encodeToString(imageByte)); + eqp_lib_img_id = addResult.getWorkclothes_id(); + } + Assert.notNull(eqp_lib_img_id, "图片上传宇视盒子失败"); + log.info("图片上传宇视盒子完成,eqp_lib_img_id = {}", eqp_lib_img_id); // TODO 新增E8人像 if (bo.getIsSyncE8()) { // 调用e8人像上传接口 @@ -184,7 +199,8 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { log.info("同步上传照片完成!"); } } catch (Exception e) { - return false; + // 处理异常并重新抛出 + throw new RuntimeException(e.getMessage()); } } return flag; @@ -218,36 +234,42 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { * @return 是否删除成功 */ @Override + @Transactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 - List list = libDeviceImgRefService.queryListByImgIds(ids); - if (list.isEmpty()) return false; - Collection refIds = list.stream().map(SisLibDeviceImgRefVo::getId).toList(); - Collection refLibIds = list.stream().map(SisLibDeviceImgRefVo::getEqpLibId).toList(); - Integer[] refImgIds = list.stream().map(SisLibDeviceImgRefVo::getEqpLibImgId).map(Long::intValue).toArray(Integer[]::new); + boolean del = baseMapper.deleteByIds(ids) > 0; + Assert.isTrue(del, "删除失败"); - List ls = libDeviceRefService.queryDeviceListByLibIds(refLibIds); + List list = libDeviceImgRefService.queryListByImgIds(ids); + Assert.notEmpty(list, "图片关联关系不存在"); + Collection refIds = list.stream().map(SisLibDeviceImgRefVo::getId).toList(); + Collection refLibIds = list.stream().map(SisLibDeviceImgRefVo::getLibId).toList(); + Integer[] refImgIds = list.stream().map(SisLibDeviceImgRefVo::getEqpLibImgId).map(Long::intValue).toArray(Integer[]::new); - ls.forEach(item -> { - UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo(); - systemInfo.setAccount(item.getEqpAccount()); - systemInfo.setPassword(item.getEqpPwd()); - systemInfo.setIp(item.getEqpIp()); - systemInfo.setPort(item.getEqpPort()); + List ls = libDeviceRefService.queryDeviceListByLibIds(refLibIds); + Assert.notEmpty(ls, "库与设备关联关系不存在"); - if (item.getEqpLibType() == 1) { - Boolean b = unViewAiBoxApi.batchDeletePerson(systemInfo, refImgIds); - log.info("删除宇视图片[{}]完成,result={}", refImgIds, b); - } else { - Boolean b = unViewAiBoxApi.deleteWorkClothes(systemInfo, item.getEqpLibId(), Arrays.stream(refImgIds).toList()); - log.info("删除宇视服装[{}]完成,result={}", refImgIds, b); - } - }); + ls.forEach(item -> { + UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo(); + systemInfo.setAccount(item.getEqpAccount()); + systemInfo.setPassword(item.getEqpPwd()); + systemInfo.setIp(item.getEqpIp()); + systemInfo.setPort(item.getEqpPort()); - Boolean refFlag = libDeviceImgRefService.deleteWithValidByIds(refIds, true); - if (!refFlag) return false; - } - return baseMapper.deleteByIds(ids) > 0; + Boolean b; + if (item.getEqpLibType() == 1) { + b = unViewAiBoxApi.batchDeletePerson(systemInfo, refImgIds); + log.info("删除宇视图片[{}]完成,result={}", refImgIds, b); + } else { + b = unViewAiBoxApi.deleteWorkClothes(systemInfo, item.getEqpLibId(), Arrays.stream(refImgIds).toList()); + log.info("删除宇视服装[{}]完成,result={}", refImgIds, b); + } + + Assert.isTrue(b, "删除图片失败"); + }); + + Boolean refFlag = libDeviceImgRefService.deleteWithValidByIds(refIds, true); + Assert.isTrue(refFlag, "删除图片关联关系失败"); + + return true; } }