feat(sis):

- 修改人像图片
This commit is contained in:
zcxlsm 2025-06-28 10:23:42 +08:00
parent 62b1e1b803
commit 3560c80c41
4 changed files with 112 additions and 84 deletions

View File

@ -220,7 +220,7 @@ public interface UnViewAiBoxApi {
* @param imageBase64 工服图片base64 * @param imageBase64 工服图片base64
* @return 返回工服的人员id * @return 返回工服的人员id
*/ */
Integer addWorkClothes(UvSystemInfo systemInfo, Integer libId, String imageBase64); WorkClothesInfo addWorkClothes(UvSystemInfo systemInfo, Integer libId, String imageBase64);
/** /**

View File

@ -218,11 +218,11 @@ public class UnViewAiBoxApiService implements UnViewAiBoxApi {
/*--------------------------------------------------------------------工服 ---------------------------------------------------------------------------*/ /*--------------------------------------------------------------------工服 ---------------------------------------------------------------------------*/
@Override @Override
public Integer addWorkClothes(UvSystemInfo uvSystemInfo, Integer libId, String imageBase64) { public WorkClothesInfo addWorkClothes(UvSystemInfo uvSystemInfo, Integer libId, String imageBase64) {
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("lib_id", libId); params.put("lib_id", libId);
params.put("image_base64", imageBase64); params.put("image_base64", imageBase64);
UniViewResult<Integer> request = uniViewHttp.request(uvSystemInfo, UniViewApiEnum.WORK_CLOTHES_ADD, params, Integer.class); UniViewResult<WorkClothesInfo> request = uniViewHttp.request(uvSystemInfo, UniViewApiEnum.WORK_CLOTHES_ADD, params, WorkClothesInfo.class);
return request.result(); return request.result();
} }

View File

@ -1,5 +1,6 @@
package org.dromara.sis.service.impl; 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.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;
@ -10,16 +11,19 @@ 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.sis.domain.SisDeviceManage; import org.dromara.sis.domain.SisDeviceManage;
import org.dromara.sis.domain.bo.SisDeviceManageBo;
import org.dromara.sis.mapper.SisDeviceManageMapper; import org.dromara.sis.mapper.SisDeviceManageMapper;
import org.dromara.sis.sdk.e8.DoorDeviceService; 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.req.DoorDeviceAddReq;
import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes; import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceAddRes;
import org.dromara.sis.service.ISisDeviceManageService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.sis.domain.bo.SisAccessControlBo; import org.dromara.sis.domain.bo.SisAccessControlBo;
import org.dromara.sis.domain.vo.SisAccessControlVo; import org.dromara.sis.domain.vo.SisAccessControlVo;
import org.dromara.sis.domain.SisAccessControl; import org.dromara.sis.domain.SisAccessControl;
import org.dromara.sis.mapper.SisAccessControlMapper; import org.dromara.sis.mapper.SisAccessControlMapper;
import org.dromara.sis.service.ISisAccessControlService; import org.dromara.sis.service.ISisAccessControlService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -38,7 +42,7 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
private final SisAccessControlMapper baseMapper; private final SisAccessControlMapper baseMapper;
private final DoorDeviceService doorDeviceService; private final DoorDeviceService doorDeviceService;
private final SisDeviceManageMapper sisDeviceManageMapper; private final ISisDeviceManageService sisDeviceManageService;
/** /**
* 查询门禁设备 * 查询门禁设备
@ -103,12 +107,15 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
* @return 是否新增成功 * @return 是否新增成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(SisAccessControlBo bo) { public Boolean insertByBo(SisAccessControlBo bo) {
SisAccessControl add = MapstructUtils.convert(bo, SisAccessControl.class); SisAccessControl add = MapstructUtils.convert(bo, SisAccessControl.class);
validEntityBeforeSave(add); Assert.notNull(add, "数据处理失败");
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
// 添加E8门禁设备 // 添加E8门禁设备
if (add.getControlType() == 2L){ if (add.getControlType() == 2L){
log.info("开始同步写入E8门禁");
DoorDeviceAddReq e8DoorReq = new DoorDeviceAddReq(); DoorDeviceAddReq e8DoorReq = new DoorDeviceAddReq();
// 设备类型 // 设备类型
e8DoorReq.setType(add.getAccessType()); e8DoorReq.setType(add.getAccessType());
@ -128,24 +135,23 @@ public class SisAccessControlServiceImpl implements ISisAccessControlService {
e8DoorReq.setNetMask("255.255.255.0"); e8DoorReq.setNetMask("255.255.255.0");
DoorDeviceAddRes e8DoorRes = doorDeviceService.addDoorDevice(e8DoorReq); DoorDeviceAddRes e8DoorRes = doorDeviceService.addDoorDevice(e8DoorReq);
Assert.notNull(e8DoorRes, "写入E8平台失败");
if (e8DoorRes != null) { log.info("E8平台写入成功将返回值{},回写到{}门禁中!",e8DoorRes.getId(),add.getAccessName());
add.setOutCode(e8DoorRes.getId().toString()); SisAccessControlBo wbBo = new SisAccessControlBo();
} else { wbBo.setId(add.getId());
return false; wbBo.setOutCode(e8DoorRes.getId().toString());
Boolean update = this.updateByBo(wbBo);
Assert.isTrue(update, "外部编码回写失败");
log.info("E8平台写入完成!");
} }
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
// 判断是否绑定摄像头 // 判断是否绑定摄像头
if (bo.getDeviceId() != null){ if (bo.getDeviceId() != null){
SisDeviceManage device = new SisDeviceManage(); SisDeviceManageBo device = new SisDeviceManageBo();
device.setId(bo.getDeviceId()); device.setId(bo.getDeviceId());
device.setAccessControlId(add.getId()); device.setAccessControlId(add.getId());
sisDeviceManageMapper.updateById(device); sisDeviceManageService.updateByBo(device);
} }
} }
return flag; return flag;

View File

@ -22,6 +22,7 @@ import org.dromara.sis.sdk.unview.UnViewAiBoxApi;
import org.dromara.sis.sdk.unview.model.UvModel; import org.dromara.sis.sdk.unview.model.UvModel;
import org.dromara.sis.service.*; import org.dromara.sis.service.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -107,6 +108,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
* @return 是否新增成功 * @return 是否新增成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(SisPersonLibImgBo bo) { public Boolean insertByBo(SisPersonLibImgBo bo) {
SisPersonLibImg add = MapstructUtils.convert(bo, SisPersonLibImg.class); SisPersonLibImg add = MapstructUtils.convert(bo, SisPersonLibImg.class);
Assert.notNull(add, "数据处理失败"); Assert.notNull(add, "数据处理失败");
@ -116,10 +118,13 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
if (flag) { if (flag) {
// 获取人像库关联设备Id // 获取人像库关联设备Id
SisPersonLibVo libVo = sisPersonLibService.queryById(bo.getLibId()); SisPersonLibVo libVo = sisPersonLibService.queryById(bo.getLibId());
if (libVo.getLibType() == 1L) {
Assert.notNull(libVo, "人像库不存在id=" + bo.getLibId()); Assert.notNull(libVo, "人像库不存在id=" + bo.getLibId());
try { } else {
Assert.notNull(libVo, "工服库不存在id=" + bo.getLibId());
}
long eqp_id; try {
long eqp_lib_id; long eqp_lib_id;
Integer eqp_lib_img_id; Integer eqp_lib_img_id;
String eqp_lib_img_url = null; String eqp_lib_img_url = null;
@ -129,7 +134,11 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
// 查询设备信息 // 查询设备信息
SisAccessControlDeviceVo vo = sisAccessControlDeviceService.queryById(eqpId); SisAccessControlDeviceVo vo = sisAccessControlDeviceService.queryById(eqpId);
Assert.notNull(vo, "门禁控制设备不存在id=" + eqpId); Assert.notNull(vo, "门禁控制设备不存在id=" + eqpId);
if (libVo.getLibType() == 1) {
log.info("准备写入{}门禁设备人像库", vo.getEqpNo()); log.info("准备写入{}门禁设备人像库", vo.getEqpNo());
} else {
log.info("准备写入{}门禁设备工服库", vo.getEqpNo());
}
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo(); UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
systemInfo.setAccount(vo.getEqpAccount()); systemInfo.setAccount(vo.getEqpAccount());
@ -144,6 +153,8 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
List<SisLibDeviceRefVo> refVo = libDeviceRefService.queryList(refBo); List<SisLibDeviceRefVo> refVo = libDeviceRefService.queryList(refBo);
Assert.notNull(refVo, "系统库与设备库关联关系不存在libId:{},eqpId:{}", bo.getLibId(), eqpId); Assert.notNull(refVo, "系统库与设备库关联关系不存在libId:{},eqpId:{}", bo.getLibId(), eqpId);
eqp_lib_id = refVo.get(0).getEqpLibId(); eqp_lib_id = refVo.get(0).getEqpLibId();
if (libVo.getLibType() == 1) {
// 宇视添加人像 // 宇视添加人像
UvModel.AddPersonParams addPersonParams = new UvModel.AddPersonParams(); UvModel.AddPersonParams addPersonParams = new UvModel.AddPersonParams();
addPersonParams.setPerson_name(bo.getImgName()); addPersonParams.setPerson_name(bo.getImgName());
@ -155,12 +166,16 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
addPersonParams.setCertificate_type(bo.getCertificateType()); addPersonParams.setCertificate_type(bo.getCertificateType());
addPersonParams.setCertificate_no(bo.getCertificateNo()); addPersonParams.setCertificate_no(bo.getCertificateNo());
addPersonParams.setBirth_date(bo.getBirthDate()); addPersonParams.setBirth_date(bo.getBirthDate());
// 发起请求获取响应 // 发起请求获取响应
UvModel.AddPersonResult addPersonResult = unViewAiBoxApi.addPerson(systemInfo, addPersonParams); UvModel.AddPersonResult addResult = unViewAiBoxApi.addPerson(systemInfo, addPersonParams);
Assert.notNull(addPersonResult, "图片上传宇视盒子失败"); eqp_lib_img_id = addResult.getPerson_id();
eqp_lib_img_id = addPersonResult.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人像 // TODO 新增E8人像
if (bo.getIsSyncE8()) { if (bo.getIsSyncE8()) {
// 调用e8人像上传接口 // 调用e8人像上传接口
@ -184,7 +199,8 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
log.info("同步上传照片完成!"); log.info("同步上传照片完成!");
} }
} catch (Exception e) { } catch (Exception e) {
return false; // 处理异常并重新抛出
throw new RuntimeException(e.getMessage());
} }
} }
return flag; return flag;
@ -218,16 +234,19 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
* @return 是否删除成功 * @return 是否删除成功
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) { boolean del = baseMapper.deleteByIds(ids) > 0;
//TODO 做一些业务上的校验,判断是否需要校验 Assert.isTrue(del, "删除失败");
List<SisLibDeviceImgRefVo> list = libDeviceImgRefService.queryListByImgIds(ids); List<SisLibDeviceImgRefVo> list = libDeviceImgRefService.queryListByImgIds(ids);
if (list.isEmpty()) return false; Assert.notEmpty(list, "图片关联关系不存在");
Collection<Long> refIds = list.stream().map(SisLibDeviceImgRefVo::getId).toList(); Collection<Long> refIds = list.stream().map(SisLibDeviceImgRefVo::getId).toList();
Collection<Long> refLibIds = list.stream().map(SisLibDeviceImgRefVo::getEqpLibId).toList(); Collection<Long> refLibIds = list.stream().map(SisLibDeviceImgRefVo::getLibId).toList();
Integer[] refImgIds = list.stream().map(SisLibDeviceImgRefVo::getEqpLibImgId).map(Long::intValue).toArray(Integer[]::new); Integer[] refImgIds = list.stream().map(SisLibDeviceImgRefVo::getEqpLibImgId).map(Long::intValue).toArray(Integer[]::new);
List<AccessControlLibDeviceBo> ls = libDeviceRefService.queryDeviceListByLibIds(refLibIds); List<AccessControlLibDeviceBo> ls = libDeviceRefService.queryDeviceListByLibIds(refLibIds);
Assert.notEmpty(ls, "库与设备关联关系不存在");
ls.forEach(item -> { ls.forEach(item -> {
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo(); UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
@ -236,18 +255,21 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
systemInfo.setIp(item.getEqpIp()); systemInfo.setIp(item.getEqpIp());
systemInfo.setPort(item.getEqpPort()); systemInfo.setPort(item.getEqpPort());
Boolean b;
if (item.getEqpLibType() == 1) { if (item.getEqpLibType() == 1) {
Boolean b = unViewAiBoxApi.batchDeletePerson(systemInfo, refImgIds); b = unViewAiBoxApi.batchDeletePerson(systemInfo, refImgIds);
log.info("删除宇视图片[{}]完成,result={}", refImgIds, b); log.info("删除宇视图片[{}]完成,result={}", refImgIds, b);
} else { } else {
Boolean b = unViewAiBoxApi.deleteWorkClothes(systemInfo, item.getEqpLibId(), Arrays.stream(refImgIds).toList()); b = unViewAiBoxApi.deleteWorkClothes(systemInfo, item.getEqpLibId(), Arrays.stream(refImgIds).toList());
log.info("删除宇视服装[{}]完成,result={}", refImgIds, b); log.info("删除宇视服装[{}]完成,result={}", refImgIds, b);
} }
Assert.isTrue(b, "删除图片失败");
}); });
Boolean refFlag = libDeviceImgRefService.deleteWithValidByIds(refIds, true); Boolean refFlag = libDeviceImgRefService.deleteWithValidByIds(refIds, true);
if (!refFlag) return false; Assert.isTrue(refFlag, "删除图片关联关系失败");
}
return baseMapper.deleteByIds(ids) > 0; return true;
} }
} }