- 人像图片与宇视平台同步操作(新增,删除),关联表同步写入/删除,可选同步至E8平台
This commit is contained in:
parent
9b2904ad06
commit
e13230dc4e
@ -76,14 +76,6 @@ public interface ISisLibDeviceRefService {
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 根据系统库id列表,获取设备库列表
|
||||
*
|
||||
* @param LibIds 系统图片id列表
|
||||
* @return 设备库列表
|
||||
*/
|
||||
List<SisLibDeviceRefVo> queryListByLibId(Collection<Long> LibIds);
|
||||
|
||||
/**
|
||||
* 通过personlIB id 查询关联关系
|
||||
*
|
||||
|
@ -141,18 +141,6 @@ public class SisLibDeviceRefServiceImpl implements ISisLibDeviceRefService {
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据系统库id列表,获取设备库列表
|
||||
*
|
||||
* @param LibIds 系统图片id列表
|
||||
* @return 设备库列表
|
||||
*/
|
||||
public List<SisLibDeviceRefVo> queryListByLibId(Collection<Long> LibIds){
|
||||
LambdaQueryWrapper<SisLibDeviceRef> lqw = Wrappers.lambdaQuery();
|
||||
lqw.in(SisLibDeviceRef::getLibId, LibIds);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SisLibDeviceRefVo> queryByLibIds(Collection<Long> ids) {
|
||||
LambdaQueryWrapper<SisLibDeviceRef> lqw = Wrappers.lambdaQuery();
|
||||
|
@ -1,5 +1,6 @@
|
||||
package org.dromara.sis.service.impl;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import org.dromara.common.core.constant.CodePrefixConstants;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
@ -11,28 +12,22 @@ 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.AccessControlLibDeviceBo;
|
||||
import org.dromara.sis.domain.bo.SisLibDeviceImgRefBo;
|
||||
import org.dromara.sis.domain.bo.SisLibDeviceRefBo;
|
||||
import org.dromara.sis.domain.vo.SisLibDeviceImgRefVo;
|
||||
import org.dromara.sis.domain.vo.SisLibDeviceRefVo;
|
||||
import org.dromara.sis.domain.vo.*;
|
||||
import org.dromara.sis.sdk.e8.VoucherControlService;
|
||||
import org.dromara.sis.sdk.unview.UnViewAiBoxApi;
|
||||
import org.dromara.sis.sdk.unview.model.UvModel;
|
||||
import org.dromara.sis.sdk.unview.service.UnViewAiBoxApiService;
|
||||
import org.dromara.sis.service.ISisLibDeviceImgRefService;
|
||||
import org.dromara.sis.service.ISisLibDeviceRefService;
|
||||
import org.dromara.sis.service.*;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.sis.domain.bo.SisPersonLibImgBo;
|
||||
import org.dromara.sis.domain.vo.SisPersonLibImgVo;
|
||||
import org.dromara.sis.domain.SisPersonLibImg;
|
||||
import org.dromara.sis.mapper.SisPersonLibImgMapper;
|
||||
import org.dromara.sis.service.ISisPersonLibImgService;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 人像信息Service业务层处理
|
||||
@ -47,9 +42,11 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
|
||||
|
||||
private final SisPersonLibImgMapper baseMapper;
|
||||
private final VoucherControlService vouchService;
|
||||
private final UnViewAiBoxApiService unViewAiBoxApiService;
|
||||
private final UnViewAiBoxApi unViewAiBoxApi;
|
||||
private final ISisPersonLibService sisPersonLibService;
|
||||
private final ISisLibDeviceRefService libDeviceRefService;
|
||||
private final ISisLibDeviceImgRefService libDeviceImgRefService;
|
||||
private final ISisAccessControlDeviceService sisAccessControlDeviceService;
|
||||
|
||||
/**
|
||||
* 查询人像信息
|
||||
@ -115,80 +112,84 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
|
||||
@Override
|
||||
public Boolean insertByBo(SisPersonLibImgBo bo) {
|
||||
SisPersonLibImg add = MapstructUtils.convert(bo, SisPersonLibImg.class);
|
||||
Assert.notNull(add, "数据处理失败");
|
||||
// 生成编码
|
||||
add.setImgCode(CodePrefixConstants.PERSON_LIB_IMAGE_CODE_PREFIX + IdUtil.getSnowflakeNextIdStr());
|
||||
validEntityBeforeSave(add);
|
||||
|
||||
|
||||
long eqp_id;
|
||||
long eqp_lib_id;
|
||||
Integer eqp_lib_img_id;
|
||||
String eqp_lib_img_url = "";
|
||||
try {
|
||||
// 根据图片路径读取图片
|
||||
byte[] imageByte = Files.readAllBytes(Paths.get(bo.getImgUrl()));
|
||||
|
||||
// TODO 新增E8人像
|
||||
if (bo.getIsSyncE8()) {
|
||||
// 调用e8人像上传接口
|
||||
String url = vouchService.uploadFace(imageByte);
|
||||
if (url == null) return false;
|
||||
eqp_lib_img_url = url;
|
||||
}
|
||||
|
||||
// TODO 同步到宇视人像照片
|
||||
// 查询系统库与设备库的关联表 获取设备库Id
|
||||
SisLibDeviceRefBo libDeviceRefBo = new SisLibDeviceRefBo();
|
||||
libDeviceRefBo.setLibId(bo.getLibId());
|
||||
List<SisLibDeviceRefVo> libDeviceRefVos = libDeviceRefService.queryList(libDeviceRefBo);
|
||||
|
||||
if (libDeviceRefVos.isEmpty()) return false;
|
||||
eqp_id = libDeviceRefVos.get(0).getEqpId();
|
||||
eqp_lib_id = libDeviceRefVos.get(0).getEqpLibId();
|
||||
|
||||
// 宇视鉴权信息
|
||||
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
|
||||
systemInfo.setAccount("admin");
|
||||
systemInfo.setPassword("nc123456.");
|
||||
systemInfo.setIp("47.109.37.87");
|
||||
systemInfo.setPort(4001);
|
||||
|
||||
// 宇视添加人像
|
||||
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(Math.toIntExact(bo.getSex()));
|
||||
addPersonParams.setEmail(bo.getEmail());
|
||||
addPersonParams.setTel(bo.getTel());
|
||||
addPersonParams.setCertificate_type(Math.toIntExact(bo.getCertificateType()));
|
||||
addPersonParams.setCertificate_no(bo.getCertificateNo());
|
||||
addPersonParams.setBirth_date(bo.getBirthDate());
|
||||
|
||||
// 发起请求获取响应
|
||||
UvModel.AddPersonResult addPersonResult = unViewAiBoxApiService.addPerson(systemInfo, addPersonParams);
|
||||
if (addPersonResult == null) return false;
|
||||
eqp_lib_img_id = addPersonResult.getPerson_id();
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
log.info("图片[{}]开始写入系统,result={}", add.getImgName(), flag);
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
//TODO 写入关联表
|
||||
SisLibDeviceImgRefBo ref = new SisLibDeviceImgRefBo();
|
||||
ref.setLibId(bo.getLibId());
|
||||
ref.setImgId(add.getId());
|
||||
ref.setEqpId(eqp_id);
|
||||
ref.setEqpLibId(eqp_lib_id);
|
||||
ref.setEqpLibImgId(eqp_lib_img_id.longValue());
|
||||
// E8
|
||||
if(bo.getIsSyncE8()){
|
||||
ref.setEqpLibImgUrl(eqp_lib_img_url);
|
||||
// 获取人像库关联设备Id
|
||||
SisPersonLibVo libVo = sisPersonLibService.queryById(bo.getLibId());
|
||||
Assert.notNull(libVo, "人像库不存在,id=" + bo.getLibId());
|
||||
try {
|
||||
|
||||
long eqp_id;
|
||||
long eqp_lib_id;
|
||||
Integer eqp_lib_img_id;
|
||||
String eqp_lib_img_url = null;
|
||||
// 根据图片路径读取图片
|
||||
byte[] imageByte = Files.readAllBytes(Paths.get(bo.getImgUrl()));
|
||||
for (Long eqpId : libVo.getEqpIds()) {
|
||||
// 查询设备信息
|
||||
SisAccessControlDeviceVo vo = sisAccessControlDeviceService.queryById(eqpId);
|
||||
Assert.notNull(vo, "门禁控制设备不存在,id=" + eqpId);
|
||||
log.info("准备写入{}门禁设备人像库", vo.getEqpNo());
|
||||
|
||||
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
|
||||
systemInfo.setAccount(vo.getEqpAccount());
|
||||
systemInfo.setPassword(vo.getEqpPwd());
|
||||
systemInfo.setIp(vo.getEqpIp());
|
||||
systemInfo.setPort(vo.getEqpPort());
|
||||
|
||||
// 获取宇视线上库ID
|
||||
SisLibDeviceRefBo refBo = new SisLibDeviceRefBo();
|
||||
refBo.setEqpId(eqpId);
|
||||
refBo.setLibId(bo.getLibId());
|
||||
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();
|
||||
|
||||
// TODO 新增E8人像
|
||||
if (bo.getIsSyncE8()) {
|
||||
// 调用e8人像上传接口
|
||||
String url = vouchService.uploadFace(imageByte);
|
||||
Assert.notNull(url, "图片上传E8平台失败");
|
||||
eqp_lib_img_url = url;
|
||||
}
|
||||
|
||||
SisLibDeviceImgRefBo ref = new SisLibDeviceImgRefBo();
|
||||
ref.setLibId(bo.getLibId());
|
||||
ref.setImgId(add.getId());
|
||||
ref.setEqpId(eqpId);
|
||||
ref.setEqpLibId(eqp_lib_id);
|
||||
ref.setEqpLibImgId(eqp_lib_img_id.longValue());
|
||||
// E8
|
||||
if (bo.getIsSyncE8()) {
|
||||
ref.setEqpLibImgUrl(eqp_lib_img_url);
|
||||
}
|
||||
Boolean insert = libDeviceImgRefService.insertByBo(ref);
|
||||
Assert.isTrue(insert, "写入图片关联关系表失败!");
|
||||
log.info("同步上传照片完成!");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
}
|
||||
libDeviceImgRefService.insertByBo(ref);
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
@ -225,19 +226,28 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService {
|
||||
if (isValid) {
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
List<SisLibDeviceImgRefVo> list = libDeviceImgRefService.queryListByImgIds(ids);
|
||||
if(list.isEmpty()) return false;
|
||||
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);
|
||||
|
||||
// 宇视鉴权信息
|
||||
UvModel.UvSystemInfo systemInfo = new UvModel.UvSystemInfo();
|
||||
systemInfo.setAccount("admin");
|
||||
systemInfo.setPassword("nc123456.");
|
||||
systemInfo.setIp("47.109.37.87");
|
||||
systemInfo.setPort(4001);
|
||||
List<AccessControlLibDeviceBo> ls = libDeviceRefService.queryDeviceListByLibIds(refLibIds);
|
||||
|
||||
Boolean unViewFlag = unViewAiBoxApiService.batchDeletePerson(systemInfo, refImgIds);
|
||||
if (!unViewFlag) return false;
|
||||
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());
|
||||
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
||||
Boolean refFlag = libDeviceImgRefService.deleteWithValidByIds(refIds, true);
|
||||
if (!refFlag) return false;
|
||||
|
Loading…
Reference in New Issue
Block a user