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
* @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
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<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();
}

View File

@ -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;

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.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<SisLibDeviceRefVo> 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<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
List<SisLibDeviceImgRefVo> list = libDeviceImgRefService.queryListByImgIds(ids);
if (list.isEmpty()) return false;
Collection<Long> refIds = list.stream().map(SisLibDeviceImgRefVo::getId).toList();
Collection<Long> 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<AccessControlLibDeviceBo> ls = libDeviceRefService.queryDeviceListByLibIds(refLibIds);
List<SisLibDeviceImgRefVo> list = libDeviceImgRefService.queryListByImgIds(ids);
Assert.notEmpty(list, "图片关联关系不存在");
Collection<Long> refIds = list.stream().map(SisLibDeviceImgRefVo::getId).toList();
Collection<Long> 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<AccessControlLibDeviceBo> 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;
}
}