调用海康bug修改

This commit is contained in:
guoshengxiong 2024-06-06 17:21:47 +08:00
parent a0445656e8
commit b0e74517df
6 changed files with 143 additions and 75 deletions

View File

@ -109,11 +109,13 @@ public class AsyncHikvision {
* 添加劳务人员-海康
*
* @param workerInfo
* @param isSaveWorker
* @param isSaveWorkerFace
*/
@Async("hikvisionExecutor")
public void addWorkerForHikvisionAsync(WorkerInfo workerInfo) {
public void addWorkerForHikvisionAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
try {
hikvisionCall.addWorkerForHikvision(workerInfo);
hikvisionCall.addWorkerForHikvision(workerInfo, isSaveWorker, isSaveWorkerFace);
} catch (Exception e) {
log.error("海康:", e);
sendNoticeForWorker(workerInfo, e, "添加");
@ -121,9 +123,9 @@ public class AsyncHikvision {
}
@Async("hikvisionExecutor")
public void editWorkerForHikvisionAsync(WorkerInfo workerInfo) {
public void editWorkerForHikvisionAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
try {
hikvisionCall.editWorkerForHikvision(workerInfo);
hikvisionCall.editWorkerForHikvision(workerInfo, isSaveWorker, isSaveWorkerFace);
} catch (Exception e) {
log.error("海康:", e);
sendNoticeForWorker(workerInfo, e, "更新");

View File

@ -55,6 +55,7 @@ import com.zhgd.xmgl.modules.worker.mapper.WorkerAttendanceMapper;
import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper;
import com.zhgd.xmgl.modules.worker.service.IWorkerAttendancePresenceService;
import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceService;
import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl;
import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl;
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionCompareDataMapper;
@ -69,6 +70,8 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -108,6 +111,9 @@ public class HikvisionCall {
@Lazy
@Autowired
CarInfoServiceImpl carInfoService;
@Autowired
@Lazy
EnterpriseInfoServiceImpl enterpriseInfoService;
@Lazy
@Autowired
private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper;
@ -822,15 +828,21 @@ public class HikvisionCall {
* 添加人员
*
* @param workerInfo
* @param isSaveWorker
* @param isSaveWorkerFace
*/
public void addWorkerForHikvision(WorkerInfo workerInfo) throws Exception {
public void addWorkerForHikvision(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) throws Exception {
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
if (isSaveWorker) {
addWorkerFromHttp(workerInfo, project);
}
if (isSaveWorkerFace) {
addWorkerFace(workerInfo, project);
}
}
public void addWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception {
// JSONObject wiJo = getWorkerInfoByCertificateNo(workerInfo, project);
@ -885,19 +897,25 @@ public class HikvisionCall {
* 编辑人员
*
* @param workerInfo
* @param isSaveWorker
* @param isSaveWorkerFace
*/
public void editWorkerForHikvision(WorkerInfo workerInfo) throws Exception {
public void editWorkerForHikvision(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) throws Exception {
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
JSONObject wiJo = getWorkerInfoByPersonId(String.valueOf(workerInfo.getId()), project);
if (wiJo != null) {
if (isSaveWorker) {
editWorkerFromHttp(workerInfo, project);
}
if (isSaveWorkerFace) {
editWorkerFace(workerInfo, project);
}
} else {
addWorkerForHikvision(workerInfo);
addWorkerForHikvision(workerInfo, isSaveWorker, isSaveWorkerFace);
}
}
@ -1036,6 +1054,7 @@ public class HikvisionCall {
String type = "25";
if (success) {
JSONObject jo = JSONObject.parseObject(rs);
if (jo.get("data") instanceof JSONObject) {
JSONObject dataJo = jo.getJSONObject("data");
Optional<JSONArray> fOp = Optional.ofNullable(dataJo).map(o -> o.getJSONArray("failures"));
if (fOp.isPresent() && fOp.get().size() != 0) {
@ -1052,6 +1071,10 @@ public class HikvisionCall {
msg = "同步成功,组织名称:" + orgName;
title += "成功";
}
} else {
msg = "同步成功,组织名称:" + orgName;
title += "成功";
}
} else {
msg = "同步失败,组织名称:" + orgName + "。失败原因:" + rs;
title += "失败";
@ -1516,7 +1539,6 @@ public class HikvisionCall {
return oldCarInfo == null ? null : oldCarInfo.getString("vehicleId");
}
/**
* 保存绑定群组关系
*
@ -1825,14 +1847,16 @@ public class HikvisionCall {
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(enterpriseInfo);
enterpriseInfo = BeanUtil.toBean(enterpriseInfoService.getEnterpriseInfoById(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, enterpriseInfo.getProjectSn()).put(Cts.ENTERPRISE_ID, enterpriseInfo.getId()).build()), EnterpriseInfo.class);
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(enterpriseInfo, String.valueOf(enterpriseInfo.getProjectEnterprise().getId()));
addOrgNoticeFromHttp(project, hikvisionOrganization);
}
private HikvisionOrganization getHikvisionOrganization(EnterpriseInfo enterpriseInfo) {
private HikvisionOrganization getHikvisionOrganization(EnterpriseInfo enterpriseInfo, String orgIndexCode) {
HikvisionOrganization hikvisionOrganization = new HikvisionOrganization();
hikvisionOrganization.setClientId(null);
hikvisionOrganization.setOrgIndexCode(String.valueOf(enterpriseInfo.getId()));
hikvisionOrganization.setOrgIndexCode(orgIndexCode);
hikvisionOrganization.setOrgName(enterpriseInfo.getEnterpriseName());
hikvisionOrganization.setParentIndexCode(enterpriseInfo.getProjectSn());
return hikvisionOrganization;
@ -1848,14 +1872,28 @@ public class HikvisionCall {
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(enterpriseInfo);
if (existOrg(project, String.valueOf(enterpriseInfo.getId()))) {
Pair<Boolean, String> existAndIndexCode = existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, enterpriseInfo.getId());
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(enterpriseInfo, existAndIndexCode.getRight());
if (existAndIndexCode.getLeft()) {
editOrgFromHttp(project, hikvisionOrganization);
} else {
addOrgNoticeFromHttp(project, hikvisionOrganization);
}
}
private Pair<Boolean, String> existAndGetEnterpriseOrgIndexCodeByEnterpriseId(Project project, Long enterpriseId) throws Exception {
EnterpriseInfo enterpriseInfo = BeanUtil.toBean(enterpriseInfoService.getEnterpriseInfoById(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn()).put(Cts.ENTERPRISE_ID, enterpriseId).build()), EnterpriseInfo.class);
JSONArray orgList = getOrgList(project, StrUtil.join(",", enterpriseInfo.getId(), enterpriseInfo.getProjectEnterprise().getId()), project.getProjectSn());
String index = null;
if (CollUtil.isEmpty(orgList)) {
index = String.valueOf(enterpriseInfo.getProjectEnterprise().getId());
} else {
index = orgList.getJSONObject(0).getString("orgIndexCode");
}
return new ImmutablePair<>(CollUtil.isNotEmpty(orgList), index);
}
/**
* 删除组织
*
@ -1868,12 +1906,8 @@ public class HikvisionCall {
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
final String ARTEMIS_PATH = "/artemis";
final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/delete";
String host = "https://" + project.getArtemisConfigHost();
JSONObject jo = new JSONObject();
jo.put("indexCodes", Arrays.asList(enterpriseId));
String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
Pair<Boolean, String> pair = existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, Long.valueOf(enterpriseId));
String rs = HikvisionUtil.deleteOrgByIndexCodes(project, Arrays.asList(pair.getRight()));
sendNoticeForOrg("删除组织到海康isc", rs, enterpriseName);
}
@ -1887,16 +1921,16 @@ public class HikvisionCall {
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(teamInfo);
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(teamInfo, project);
addOrgNoticeFromHttp(project, hikvisionOrganization);
}
private HikvisionOrganization getHikvisionOrganization(TeamInfo teamInfo) {
private HikvisionOrganization getHikvisionOrganization(TeamInfo teamInfo, Project project) throws Exception {
HikvisionOrganization hikvisionOrganization = new HikvisionOrganization();
hikvisionOrganization.setClientId(null);
hikvisionOrganization.setOrgIndexCode(String.valueOf(teamInfo.getId()));
hikvisionOrganization.setOrgName(teamInfo.getTeamName());
hikvisionOrganization.setParentIndexCode(String.valueOf(teamInfo.getEnterpriseId()));
hikvisionOrganization.setParentIndexCode(existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, teamInfo.getEnterpriseId()).getRight());
return hikvisionOrganization;
}
@ -1910,8 +1944,8 @@ public class HikvisionCall {
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(teamInfo);
if (existOrg(project, String.valueOf(teamInfo.getId()))) {
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(teamInfo, project);
if (existOrg(project, String.valueOf(teamInfo.getId()), hikvisionOrganization.getParentIndexCode())) {
editOrgFromHttp(project, hikvisionOrganization);
} else {
addOrgNoticeFromHttp(project, hikvisionOrganization);
@ -1927,29 +1961,15 @@ public class HikvisionCall {
}
private void deleteOrgFromHttp(Project project, List<String> idList, String orgName) throws Exception {
final String ARTEMIS_PATH = "/artemis";
final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/delete";
String host = "https://" + project.getArtemisConfigHost();
JSONObject jo = new JSONObject();
jo.put("indexCodes", idList);
String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
String rs = HikvisionUtil.deleteOrgByIndexCodes(project, idList);
sendNoticeForOrg("删除组织到海康isc", rs, orgName);
}
private void addOrgNoticeFromHttp(Project project, HikvisionOrganization hikvisionOrganization) throws Exception {
String rs = addOrgFromHttp(project, hikvisionOrganization);
String rs = HikvisionUtil.addOrgFromHttp(project, hikvisionOrganization);
sendNoticeForOrg("添加组织到海康isc", rs, hikvisionOrganization.getOrgName());
}
private String addOrgFromHttp(Project project, HikvisionOrganization hikvisionOrganization) throws Exception {
final String ARTEMIS_PATH = "/artemis";
final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/add";
String host = "https://" + project.getArtemisConfigHost();
ArrayList<HikvisionOrganization> list = new ArrayList<>();
list.add(hikvisionOrganization);
return HikvisionUtil.doPost(host, path, JSON.toJSONString(list), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
}
/**
* 删除组织
*
@ -1974,16 +1994,16 @@ public class HikvisionCall {
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(departmentInfo);
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(departmentInfo, project);
addOrgNoticeFromHttp(project, hikvisionOrganization);
}
private HikvisionOrganization getHikvisionOrganization(DepartmentInfo departmentInfo) {
private HikvisionOrganization getHikvisionOrganization(DepartmentInfo departmentInfo, Project project) throws Exception {
HikvisionOrganization hikvisionOrganization = new HikvisionOrganization();
hikvisionOrganization.setClientId(null);
hikvisionOrganization.setOrgIndexCode(String.valueOf(departmentInfo.getId()));
hikvisionOrganization.setOrgName(departmentInfo.getDepartmentName());
hikvisionOrganization.setParentIndexCode(String.valueOf(departmentInfo.getEnterpriseId()));
hikvisionOrganization.setParentIndexCode(existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, departmentInfo.getEnterpriseId()).getRight());
return hikvisionOrganization;
}
@ -1997,8 +2017,8 @@ public class HikvisionCall {
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
}
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(departmentInfo);
if (existOrg(project, String.valueOf(departmentInfo.getId()))) {
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(departmentInfo, project);
if (existOrg(project, String.valueOf(departmentInfo.getId()), hikvisionOrganization.getParentIndexCode())) {
editOrgFromHttp(project, hikvisionOrganization);
} else {
addOrgNoticeFromHttp(project, hikvisionOrganization);
@ -2030,7 +2050,7 @@ public class HikvisionCall {
return;
}
HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(project);
addOrgFromHttp(project, hikvisionOrganization);
HikvisionUtil.addOrgFromHttp(project, hikvisionOrganization);
}
/**
@ -2053,16 +2073,31 @@ public class HikvisionCall {
}
/**
* 组织存在
* 组织是否存在
*
* @param project
* @param orgIndex
* @param orgIndexs 逗号分割
* @param parentOrgIndexCode
* @return
*/
public boolean existOrg(Project project, String orgIndex) throws Exception {
String rs = HikvisionUtil.getOrgV2(project, orgIndex, project.getProjectSn());
public boolean existOrg(Project project, String orgIndexs, String parentOrgIndexCode) throws Exception {
JSONArray list = getOrgList(project, orgIndexs, parentOrgIndexCode);
return list.size() > 0;
}
/**
* 查询组织
*
* @param project
* @param orgIndexs 逗号分割
* @param parentOrgIndexCode
* @return
*/
private JSONArray getOrgList(Project project, String orgIndexs, String parentOrgIndexCode) throws Exception {
String rs = HikvisionUtil.getOrgV2(project, orgIndexs, parentOrgIndexCode);
JSONObject jo = HikvisionUtil.getJSONObjectData(rs);
return jo.getJSONArray("list").size() > 0;
JSONArray list = jo.getJSONArray("list");
return list;
}
private HikvisionOrganization getHikvisionOrganization(Project project) {

View File

@ -250,7 +250,11 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl<EnterpriseInfoMapper,
}
List<XzUserToSupplier> xzUserToSuppliers = baseMapper.getSupplierUserIdByProjectSnAndEnterpriseId(projectSn, enterpriseId);
for (XzUserToSupplier xzUserToSupplier : xzUserToSuppliers) {
try {
systemUserService.deleteTenantOrSupplier(String.valueOf(xzUserToSupplier.getUserId()), projectSn);
} catch (Exception e) {
e.printStackTrace();
}
}
EnterpriseInfo enterpriseInfo = baseMapper.selectById(enterpriseId);
//同步海康

View File

@ -2345,7 +2345,7 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(1).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(1).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
asyncHikvision.addWorkerForHikvisionAsync(workerInfo);
asyncHikvision.addWorkerForHikvisionAsync(workerInfo, true, true);
}
@Override
@ -2367,6 +2367,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(2).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(2).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
asyncHikvision.editWorkerForHikvisionAsync(workerInfo);
asyncHikvision.editWorkerForHikvisionAsync(workerInfo, true, true);
}
}

View File

@ -58,6 +58,7 @@ import java.util.*;
@Transactional(rollbackFor = Exception.class)
@Slf4j
public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCompareDataMapper, XzHikvisionCompareData> implements IXzHikvisionCompareDataService {
@Lazy
@Autowired
private ICarInfoService carInfoService;
@Lazy
@ -292,13 +293,14 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCo
private void syncWorker(XzHikvisionCompareData data) throws Exception {
boolean isWorker = data.getOurType() == 4;
ProjectInfoExtVo projectInfoBySn = projectService.getProjectInfoBySn(data.getProjectSn());
WorkerInfo workerInfo = workerInfoService.queryById(data.getUniqueId());
if (data.getExistIsc() == 1 && data.getExistMyPlatform() == 0) {
//查询id是否存在平台存在就更新不存在就删除
if (workerInfo != null) {
//同步海康
workerInfoService.editWorkerForHikvision(workerInfo);
asyncHikvision.editWorkerForHikvisionAsync(workerInfo, isWorker, !isWorker);
} else {
workerInfo = new WorkerInfo();
workerInfo.setWorkerName(data.getWorkerName());
@ -314,10 +316,10 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCo
JSONArray list = HikvisionUtil.getJSONObjectData(rtJo).getJSONArray("list");
if (CollUtil.isEmpty(list)) {
//新增
workerInfoService.addWorkerForHikvision(workerInfo);
asyncHikvision.addWorkerForHikvisionAsync(workerInfo, isWorker, !isWorker);
} else {
//更新
workerInfoService.editWorkerForHikvision(workerInfo);
asyncHikvision.editWorkerForHikvisionAsync(workerInfo, isWorker, !isWorker);
}
} else {
log.error("校验数据同步海康失败,失败原因:{}", rtJo.toJSONString());

View File

@ -10,15 +10,13 @@ import com.hikvision.artemis.sdk.constant.Constants;
import com.hikvision.artemis.sdk.enums.Method;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.jeecg.common.execption.OpenPromptException;
import com.zhgd.xmgl.base.HikvisionOrganization;
import com.zhgd.xmgl.base.HikvisionReservationCarInfo;
import com.zhgd.xmgl.modules.project.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
* 海康接口
@ -374,4 +372,31 @@ public class HikvisionUtil {
String body = jo.toJSONString();
return doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
}
/**
* 批量添加组织
*
* @param project
* @param hikvisionOrganization
* @return
* @throws Exception
*/
public static String addOrgFromHttp(Project project, HikvisionOrganization hikvisionOrganization) throws Exception {
final String ARTEMIS_PATH = "/artemis";
final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/add";
String host = "https://" + project.getArtemisConfigHost();
ArrayList<HikvisionOrganization> list = new ArrayList<>();
list.add(hikvisionOrganization);
return doPost(host, path, JSON.toJSONString(list), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
}
public static String deleteOrgByIndexCodes(Project project, List<String> indexCodes) throws Exception {
final String ARTEMIS_PATH = "/artemis";
final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/delete";
String host = "https://" + project.getArtemisConfigHost();
JSONObject jo = new JSONObject();
jo.put("indexCodes", indexCodes);
String rs = doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
return rs;
}
}