1.优化人脸同步大华

dev
shenzhidan 2026-07-29 16:52:12 +08:00 committed by zhangxiongfeng
parent 2f3c4eefd9
commit 9502b52bf6
1 changed files with 19 additions and 28 deletions

View File

@ -1,10 +1,10 @@
package com.zcloud.primeport.command; package com.zcloud.primeport.command;
import com.alibaba.cola.exception.BizException; import com.alibaba.cola.exception.BizException;
import com.zcloud.gbscommon.dahua.cmd.DaHuaPersonSyncCmd;
import com.zcloud.gbscommon.utils.Base64Util; import com.zcloud.gbscommon.utils.Base64Util;
import com.zcloud.primeport.domain.gateway.DaHuaGateway; import com.zcloud.primeport.domain.gateway.DaHuaGateway;
import com.zcloud.primeport.domain.gateway.PersonApplyGateway; import com.zcloud.primeport.domain.gateway.PersonApplyGateway;
import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd;
import com.zcloud.primeport.domain.model.PersonApplyE; import com.zcloud.primeport.domain.model.PersonApplyE;
import com.zcloud.primeport.domain.model.XgfApplyPersonE; import com.zcloud.primeport.domain.model.XgfApplyPersonE;
import com.zcloud.primeport.dto.PersonApplyUpdateCmd; import com.zcloud.primeport.dto.PersonApplyUpdateCmd;
@ -20,7 +20,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* 访 *
*/ */
@Slf4j @Slf4j
@Component @Component
@ -28,7 +28,6 @@ import java.util.Map;
public class DaHuaPersonSyncExe { public class DaHuaPersonSyncExe {
private static final int RELATED_PARTY = 3; private static final int RELATED_PARTY = 3;
private static final int TEMPORARY_VISITOR = 4;
private final DaHuaGateway daHuaGateway; private final DaHuaGateway daHuaGateway;
private final PersonApplyGateway personApplyGateway; private final PersonApplyGateway personApplyGateway;
@ -37,11 +36,11 @@ public class DaHuaPersonSyncExe {
private String fileUrl; private String fileUrl;
/** /**
* 访 *
*/ */
public void syncApprovedPersons(Long applyId) { public void syncApprovedPersons(Long applyId) {
XgfApplyPersonE apply = personApplyGateway.getXgfApplyPersonById(applyId); XgfApplyPersonE apply = personApplyGateway.getXgfApplyPersonById(applyId);
if (apply == null || !isDahuaSyncPerson(apply.getPersonBelongType())) { if (apply == null || !Integer.valueOf(RELATED_PARTY).equals(apply.getPersonBelongType())) {
return; return;
} }
List<PersonApplyE> persons = personApplyGateway.personListByxgfApplyPersonId(applyId); List<PersonApplyE> persons = personApplyGateway.personListByxgfApplyPersonId(applyId);
@ -53,7 +52,7 @@ public class DaHuaPersonSyncExe {
Long dahuaPersonId = daHuaGateway.findPersonIdByPaperNumber(paperNumber); Long dahuaPersonId = daHuaGateway.findPersonIdByPaperNumber(paperNumber);
DaHuaPersonSyncCmd syncCmd = buildSyncCmd(dahuaPersonId, person.getEmployeePersonUserName(), DaHuaPersonSyncCmd syncCmd = buildSyncCmd(dahuaPersonId, person.getEmployeePersonUserName(),
paperNumber, person.getUserPhone(), person.getUserFaceUrl(), paperNumber, person.getUserPhone(), person.getUserFaceUrl(),
apply.getVisitStartTime(), apply.getVisitEndTime(), person.getPersonCorpId()); apply.getVisitStartTime(), apply.getVisitEndTime());
Map<String, Object> result; Map<String, Object> result;
if (dahuaPersonId == null) { if (dahuaPersonId == null) {
syncCmd.setId(daHuaGateway.generatePersonId()); syncCmd.setId(daHuaGateway.generatePersonId());
@ -66,10 +65,10 @@ public class DaHuaPersonSyncExe {
} }
/** /**
* 访 *
*/ */
public void syncUpdatedPerson(PersonApplyE original, PersonApplyUpdateCmd updated) { public void syncUpdatedPerson(PersonApplyE original, PersonApplyUpdateCmd updated) {
if (original == null || !isDahuaSyncPerson(updated.getPersonBelongType())) { if (original == null || !Integer.valueOf(RELATED_PARTY).equals(updated.getPersonBelongType())) {
return; return;
} }
String originalPaperNumber = decodeUserCard(original.getUserCard()); String originalPaperNumber = decodeUserCard(original.getUserCard());
@ -80,12 +79,12 @@ public class DaHuaPersonSyncExe {
String updatedPaperNumber = decodeUserCard(updated.getUserCard()); String updatedPaperNumber = decodeUserCard(updated.getUserCard());
DaHuaPersonSyncCmd syncCmd = buildSyncCmd(dahuaPersonId, updated.getEmployeePersonUserName(), DaHuaPersonSyncCmd syncCmd = buildSyncCmd(dahuaPersonId, updated.getEmployeePersonUserName(),
updatedPaperNumber, updated.getUserPhone(), updated.getUserFaceUrl(), updatedPaperNumber, updated.getUserPhone(), updated.getUserFaceUrl(),
updated.getVisitStartTime(), updated.getVisitEndTime(), updated.getPersonCorpId()); updated.getVisitStartTime(), updated.getVisitEndTime());
checkResult(daHuaGateway.updatePerson(syncCmd), "修改大华人员失败"); checkResult(daHuaGateway.updatePerson(syncCmd), "修改大华人员失败");
} }
/** /**
* 访 *
*/ */
public void syncDeletedPersons(List<PersonApplyE> persons) { public void syncDeletedPersons(List<PersonApplyE> persons) {
if (persons == null || persons.isEmpty()) { if (persons == null || persons.isEmpty()) {
@ -94,7 +93,7 @@ public class DaHuaPersonSyncExe {
List<Long> dahuaPersonIds = new ArrayList<>(); List<Long> dahuaPersonIds = new ArrayList<>();
for (PersonApplyE person : persons) { for (PersonApplyE person : persons) {
XgfApplyPersonE apply = personApplyGateway.getXgfApplyPersonById(person.getXgfApplyPersonId()); XgfApplyPersonE apply = personApplyGateway.getXgfApplyPersonById(person.getXgfApplyPersonId());
if (apply == null || !isDahuaSyncPerson(apply.getPersonBelongType())) { if (apply == null || !Integer.valueOf(RELATED_PARTY).equals(apply.getPersonBelongType())) {
continue; continue;
} }
Long dahuaPersonId = daHuaGateway.findPersonIdByPaperNumber(decodeUserCard(person.getUserCard())); Long dahuaPersonId = daHuaGateway.findPersonIdByPaperNumber(decodeUserCard(person.getUserCard()));
@ -108,7 +107,7 @@ public class DaHuaPersonSyncExe {
} }
private DaHuaPersonSyncCmd buildSyncCmd(Long id, String name, String paperNumber, String phone, private DaHuaPersonSyncCmd buildSyncCmd(Long id, String name, String paperNumber, String phone,
String faceUrl, String startTime, String endTime, Long corpId) { String faceUrl, String startTime, String endTime) {
DaHuaPersonSyncCmd cmd = new DaHuaPersonSyncCmd(); DaHuaPersonSyncCmd cmd = new DaHuaPersonSyncCmd();
cmd.setService("evo-thirdParty"); cmd.setService("evo-thirdParty");
cmd.setId(id); cmd.setId(id);
@ -116,11 +115,7 @@ public class DaHuaPersonSyncExe {
cmd.setCode("hbqa" + paperNumber); cmd.setCode("hbqa" + paperNumber);
cmd.setPaperType(111); cmd.setPaperType(111);
cmd.setPaperNumber(paperNumber); cmd.setPaperNumber(paperNumber);
Long dahuaDeptId = daHuaGateway.findDahuaDepartmentIdByCorpId(corpId); cmd.setDepartmentId(1L);
if (dahuaDeptId == null) {
throw new BizException("未找到大华部门映射配置, corpId=" + corpId);
}
cmd.setDepartmentId(dahuaDeptId);
cmd.setDepartmentType(2); cmd.setDepartmentType(2);
cmd.setType(3); cmd.setType(3);
cmd.setPhone(phone); cmd.setPhone(phone);
@ -130,18 +125,19 @@ public class DaHuaPersonSyncExe {
DaHuaPersonSyncCmd.PersonBiosignature face = new DaHuaPersonSyncCmd.PersonBiosignature(); DaHuaPersonSyncCmd.PersonBiosignature face = new DaHuaPersonSyncCmd.PersonBiosignature();
face.setType(3); face.setType(3);
face.setIndex(1); face.setIndex(1);
// userFaceUrl 是文件服务器相对路径,读取图片并转换为 Base64 后交给大华网关。
face.setBase64Data(resolveFaceBase64(faceUrl)); face.setBase64Data(resolveFaceBase64(faceUrl));
cmd.setPersonBiosignatures(Collections.singletonList(face)); cmd.setPersonBiosignatures(Collections.singletonList(face));
return cmd; return cmd;
} }
/** /**
* Base64 * Base64
* path fileUrl使 * path fileUrl使
*/ */
private String resolveFaceBase64(String faceUrl) { private String resolveFaceBase64(String faceUrl) {
if (faceUrl == null || faceUrl.trim().isEmpty()) { if (faceUrl == null || faceUrl.trim().isEmpty()) {
throw new BizException("人员头像不能为空"); throw new BizException("相关方人员头像不能为空");
} }
if (fileUrl == null || fileUrl.trim().isEmpty()) { if (fileUrl == null || fileUrl.trim().isEmpty()) {
throw new BizException("文件访问地址未配置"); throw new BizException("文件访问地址未配置");
@ -154,14 +150,14 @@ public class DaHuaPersonSyncExe {
try { try {
String faceBase64 = Base64Util.urlToBase64(imageUrl); String faceBase64 = Base64Util.urlToBase64(imageUrl);
if (faceBase64 == null || faceBase64.trim().isEmpty()) { if (faceBase64 == null || faceBase64.trim().isEmpty()) {
throw new BizException("人员头像转换失败"); throw new BizException("相关方人员头像转换失败");
} }
return faceBase64; return faceBase64;
} catch (BizException e) { } catch (BizException e) {
throw e; throw e;
} catch (Exception e) { } catch (Exception e) {
log.error("获取人员头像失败, imageUrl={}", imageUrl, e); log.error("获取相关方人员头像失败, imageUrl={}", imageUrl, e);
throw new BizException("获取人员头像失败"); throw new BizException("获取相关方人员头像失败");
} }
} }
@ -169,11 +165,6 @@ public class DaHuaPersonSyncExe {
return path.startsWith("/") ? path.substring(1) : path; return path.startsWith("/") ? path.substring(1) : path;
} }
private boolean isDahuaSyncPerson(Integer personBelongType) {
return Integer.valueOf(RELATED_PARTY).equals(personBelongType)
|| Integer.valueOf(TEMPORARY_VISITOR).equals(personBelongType);
}
private String decodeUserCard(String userCard) { private String decodeUserCard(String userCard) {
try { try {
return Base64.decodeToString(userCard); return Base64.decodeToString(userCard);
@ -188,4 +179,4 @@ public class DaHuaPersonSyncExe {
throw new BizException(message + (errorMessage == null ? "" : ": " + errorMessage)); throw new BizException(message + (errorMessage == null ? "" : ": " + errorMessage));
} }
} }
} }