1.优化人脸同步大华
parent
2f3c4eefd9
commit
9502b52bf6
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue