wisdomisite-java/src/main/java/com/zhgd/xmgl/task/HikvisionTask.java

551 lines
28 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.zhgd.xmgl.task;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gexin.fastjson.JSON;
import com.zhgd.redis.lock.RedisRepository;
import com.zhgd.xmgl.async.AsyncHikvision;
import com.zhgd.xmgl.call.HikvisionCall;
import com.zhgd.xmgl.constant.Cts;
import com.zhgd.xmgl.modules.car.entity.CarInfo;
import com.zhgd.xmgl.modules.car.service.impl.CarInfoServiceImpl;
import com.zhgd.xmgl.modules.car.service.impl.ProjectCarCameraConfigServiceImpl;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.project.service.impl.ProjectUfaceConfigServiceImpl;
import com.zhgd.xmgl.modules.worker.entity.DepartmentInfo;
import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo;
import com.zhgd.xmgl.modules.worker.entity.TeamInfo;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.mapper.DepartmentInfoMapper;
import com.zhgd.xmgl.modules.worker.service.ITeamInfoService;
import com.zhgd.xmgl.modules.worker.service.impl.DepartmentInfoServiceImpl;
import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl;
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionCompareDataMapper;
import com.zhgd.xmgl.modules.xz.service.IXzHikvisionCompareDataService;
import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionSyncServiceImpl;
import com.zhgd.xmgl.util.HikvisionUtil;
import com.zhgd.xmgl.util.JoBuilder;
import com.zhgd.xmgl.util.MapBuilder;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@RestController
@RequestMapping(value = {"xmgl/task", "xmgl/hikvision"})
public class HikvisionTask {
@Autowired
XzHikvisionSyncServiceImpl xzHikvisionSyncService;
@Lazy
@Autowired
private HikvisionCall hikvisionCall;
@Lazy
@Autowired
private ProjectMapper projectMapper;
@Lazy
@Autowired
private EnterpriseInfoServiceImpl enterpriseInfoService;
@Lazy
@Autowired
private CarInfoServiceImpl carInfoService;
@Lazy
@Autowired
private DepartmentInfoServiceImpl departmentInfoService;
@Lazy
@Autowired
private ITeamInfoService teamInfoService;
@Lazy
@Autowired
private WorkerInfoServiceImpl workerInfoService;
@Lazy
@Autowired
private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper;
@Lazy
@Autowired
private RedisRepository redisRepository;
@Lazy
@Autowired
private IXzHikvisionCompareDataService xzHikvisionCompareDataService;
@Lazy
@Autowired
private DepartmentInfoMapper departmentInfoMapper;
@Lazy
@Autowired
private ProjectCarCameraConfigServiceImpl projectCarCameraConfigService;
@Lazy
@Autowired
private ProjectUfaceConfigServiceImpl projectUfaceConfigService;
@Lazy
@Autowired
private AsyncHikvision asyncHikvision;
/**
* 删除长时间超过30分钟的卡主的任务设备不支持并发多个任务下权限如果你同时往同一个设备下了多个任务会导致设备堵住任务一直处于下载中这些任务就释放不了
*
* @throws Exception
*/
@SchedulerLock(name = "deleteLongTask", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0/30 * * * ?")
@RequestMapping("deleteLongTask")
public void deleteLongTask() throws Exception {
doDeleteLongTask(false);
}
@RequestMapping("deleteAllTask")
public void deleteAllTask() throws Exception {
doDeleteLongTask(true);
}
private void doDeleteLongTask(boolean deleteAll) {
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()
.eq(Project::getSyncHikvision, 1));
for (Project project : projects) {
try {
JSONObject joRt = HikvisionUtil.getTasks(project, new JoBuilder().put("pageNo", 1).put("pageSize", 1000).put("authTaskStatusList", Arrays.asList(0, 1)).build());
JSONObject dataJo = HikvisionUtil.getJsonObjectData(joRt);
JSONArray listJa = dataJo.getJSONArray("list");
for (int i = 0; i < listJa.size(); i++) {
JSONObject jo = listJa.getJSONObject(i);
if (deleteAll || DateUtil.compare(DateUtil.parse(jo.getString("createTime")), DateUtil.offsetMinute(new Date(), -30)) < 0) {
if (jo.getInteger("taskStatus").equals(1)) {
HikvisionUtil.stopTask(project, new JoBuilder().put("taskId", jo.getString("authTaskId")).build());
} else {
HikvisionUtil.deleteTask(project, new JoBuilder().put("taskId", jo.getString("authTaskId")).build());
}
}
}
} catch (Exception e) {
log.error("" + e);
}
}
}
/**
* 定时一分钟获取海康数据
*/
@SchedulerLock(name = "getRecordForHikvision", lockAtMostFor = 1000 * 30, lockAtLeastFor = 1000 * 30)
@Scheduled(cron = "0 */2 * * * ?")
@RequestMapping("getRecordForHikvision")
public void getRecordForHikvision() {
String startTime = DateUtil.formatDateTime(DateUtil.offsetMinute(new Date(), -5));
String endTime = DateUtil.formatDateTime(new Date());
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>()
.eq(Project::getSyncHikvision, 1));
for (Project project : projects) {
log.info("定时获取海康记录,{}", project.getProjectName());
HashMap<String, Object> map = new HashMap<>(16);
map.put("projectSn", project.getProjectSn());
map.put("startTime", startTime);
map.put("endTime", endTime);
String projectSn = project.getProjectSn();
boolean carConfig = projectCarCameraConfigService.isHikvisionConfig(projectSn);
boolean ufaceConfig = projectUfaceConfigService.isHikvisionConfig(projectSn);
if (carConfig) {
asyncHikvision.getCrossRecordsAsync(map);
}
if (ufaceConfig) {
asyncHikvision.getDoorEventsAsync(map);
}
}
}
/**
* 定时重试失败的记录,十分钟一次
*/
// @SchedulerLock(name = "retrySyncHikvisionTenMin", lockAtMostFor = 1000 * 30, lockAtLeastFor = 1000 * 30)
// @Scheduled(cron = "0 */10 * * * ?")
// @RequestMapping("retrySyncHikvisionTenMin")
// public void retrySyncHikvisionTenMin() {
// try {
// HashMap<String, Object> newListMap = new HashMap<>(16);
// newListMap.put("isSuccess", 0);
// newListMap.put("createDateBegin", DateUtil.formatDateTime(DateUtil.offsetHour(new Date(), -1)));
// newListMap.put("geBeforeTenMin", 1);
// List<XzHikvisionSync> newestList = xzHikvisionSyncService.getNewestList(newListMap);
// newestList = newestList.stream().filter(xzHikvisionSync -> Objects.equals(xzHikvisionSync.getIsSuccess(), 0)).collect(Collectors.toList());
// for (XzHikvisionSync xzHikvisionSync : newestList) {
// log.info("海康同步的定时重试失败的记录id:{}", xzHikvisionSync.getId());
// HashMap<String, Object> retryMap = new HashMap<>(16);
// retryMap.put("id", xzHikvisionSync.getId());
// try {
// xzHikvisionSyncService.retry(retryMap);
// } catch (Exception e) {
// log.error("海康同步的定时重试失败的记录:error:", e);
// }
// }
// } catch (Exception e) {
// log.error("定时重试失败的记录,十分钟一次,出现错误" + e);
// }
// }
/**
* 定时重试失败的记录,一小时一次
*/
// @SchedulerLock(name = "retrySyncHikvisionHourly", lockAtMostFor = 1000 * 30, lockAtLeastFor = 1000 * 30)
// @Scheduled(cron = "0 0 0/1 * * ?")
// @RequestMapping("retrySyncHikvisionHourly")
// public void retrySyncHikvisionHourly() {
// try {
// HashMap<String, Object> newListMap = new HashMap<>(16);
// newListMap.put("isSuccess", 0);
// newListMap.put("createDateBegin", DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -1)));
// newListMap.put("geBeforeHour", 1);
// List<XzHikvisionSync> newestList = xzHikvisionSyncService.getNewestList(newListMap);
// newestList = newestList.stream().filter(xzHikvisionSync -> Objects.equals(xzHikvisionSync.getIsSuccess(), 0)).collect(Collectors.toList());
// for (XzHikvisionSync xzHikvisionSync : newestList) {
// log.info("海康同步的定时重试失败的记录id:{}", xzHikvisionSync.getId());
// HashMap<String, Object> retryMap = new HashMap<>(16);
// retryMap.put("id", xzHikvisionSync.getId());
// try {
// xzHikvisionSyncService.retry(retryMap);
// } catch (Exception e) {
// log.error("海康同步的定时重试失败的记录:error:", e);
// }
// }
// } catch (Exception e) {
// log.error("定时重试失败的记录,一小时一次" + e);
// }
// }
/**
* 数据校验同步
*/
@SchedulerLock(name = "compareData", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0 3 * * ?")
@RequestMapping("compareData")
public void compareData() throws Exception {
log.info("数据校验同步任务开始");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>().eq(Project::getSyncHikvision, 1));
for (Project project : projects) {
try {
xzHikvisionCompareDataService.deleteAllCompareData(project);
boolean ufaceConfig = projectUfaceConfigService.isHikvisionConfig(project.getProjectSn());
if (ufaceConfig) {
compareHikvisionForEnterpriseEtc(project);
}
boolean carConfig = projectCarCameraConfigService.isHikvisionConfig(project.getProjectSn());
if (carConfig) {
compareHikvisionForCar(project);
}
} catch (Exception e) {
log.error("数据校验同步失败projectSn:{} ", project.getProjectSn(), e);
xzHikvisionCompareDataService.addExceptionShowIfNull(project.getProjectSn());
}
}
}
/**
* 对比车
*
* @param project
* @throws Exception
*/
public void compareHikvisionForCar(Project project) throws Exception {
compareHikvisionForFixCar(project);
compareHikvisionForReservationCar(project);
compareHikvisionForBlackCar(project);
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "4");
}
/**
* 对比企业
*
* @param project
* @throws Exception
*/
public void compareHikvisionForEnterpriseEtc(Project project) throws Exception {
//对比企业
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
param.put("parentOrgIndexCode", project.getProjectSn());
JSONObject rtJo = HikvisionUtil.getSubOrgListByParentOrg(project, param);
List<EnterpriseInfo> enterpriseInfos = BeanUtil.copyToList(enterpriseInfoService.getEnterpriseInfoList(new MapBuilder<String, Object>().put(Cts.PROJECT_SN, project.getProjectSn()).build()), EnterpriseInfo.class);
log.info("数据校验我们平台的企业列表:{}", JSON.toJSONString(enterpriseInfos));
JSONObject dataJo = HikvisionUtil.getJsonObjectData(rtJo);
JSONArray listJa = dataJo.getJSONArray("list");
if (CollUtil.isEmpty(listJa)) {
for (EnterpriseInfo enterpriseInfo : enterpriseInfos) {
xzHikvisionCompareDataService.addCompareDataForEnterprise(project, enterpriseInfo.getEnterpriseName(), 0, 1, String.valueOf(enterpriseInfo.getId()));
compareHikvisionForDepartmentAndTeamEtc(project, String.valueOf(enterpriseInfo.getId()), String.valueOf(enterpriseInfo.getId()));
}
} else {
//isc存在平台也存在
HashSet<String> nameSet = new HashSet<>();
enterpriseInfos.forEach(enterpriseInfo -> nameSet.add(enterpriseInfo.getEnterpriseName()));
listJa.forEach(o -> nameSet.add(((JSONObject) o).getString("orgName")));
Map<String, JSONObject> iscMap = listJa.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("orgName"), o -> (JSONObject) o, (o, o2) -> o2));
Map<String, EnterpriseInfo> myMap = enterpriseInfos.stream().collect(Collectors.toMap(EnterpriseInfo::getEnterpriseName, Function.identity(), (o, o2) -> o2));
for (String name : nameSet) {
String orgIndex = null;
String enterpriseId = null;
if (myMap.containsKey(name) && !iscMap.containsKey(name)) {
orgIndex = String.valueOf(myMap.get(name).getId());
enterpriseId = orgIndex;
xzHikvisionCompareDataService.addCompareDataForEnterprise(project, name, 0, 1, orgIndex);
} else if (!myMap.containsKey(name) && iscMap.containsKey(name)) {
orgIndex = iscMap.get(name).getString("orgIndexCode");
enterpriseId = orgIndex;
xzHikvisionCompareDataService.addCompareDataForEnterprise(project, name, 1, 0, orgIndex);
} else {
enterpriseId = String.valueOf(myMap.get(name).getId());
orgIndex = iscMap.get(name).getString("orgIndexCode");
}
compareHikvisionForDepartmentAndTeamEtc(project, orgIndex, enterpriseId);
}
}
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "1");
}
/**
* 对比班组和部门
*
* @param project
* @param orgIndex
* @param enterpriseId
* @throws Exception
*/
private void compareHikvisionForDepartmentAndTeamEtc(Project project, String orgIndex, String enterpriseId) throws Exception {
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
param.put("parentOrgIndexCode", orgIndex);
JSONObject rtJo = HikvisionUtil.getSubOrgListByParentOrg(project, param);
List<TeamInfo> teamList = teamInfoService.getProjectTeamList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn()).put(Cts.ENTERPRISE_ID, enterpriseId).build());
teamList.forEach(o -> o.setTeamName(o.getTeamName() + Cts.ISC_SYNC_TEAM_SUFFIX));
log.info("数据校验我们平台的班组列表:{}", JSON.toJSONString(teamList));
List<DepartmentInfo> departmentInfoList = departmentInfoMapper.getDepartmentInfoList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn()).put(Cts.ENTERPRISE_ID, enterpriseId).build());
departmentInfoList.forEach(o -> o.setDepartmentName(o.getDepartmentName() + Cts.ISC_SYNC_DEPARTMENT_SUFFIX));
log.info("数据校验我们平台的部门列表:{}", JSON.toJSONString(departmentInfoList));
JSONObject dataJo = HikvisionUtil.getJsonObjectData(rtJo);
JSONArray listJa = dataJo.getJSONArray("list");
if (CollUtil.isEmpty(listJa)) {
for (TeamInfo teamInfo : teamList) {
xzHikvisionCompareDataService.addCompareDataForTeam(project, teamInfo.getTeamName(), 0, 1, String.valueOf(teamInfo.getId()));
compareHikvisionForWorker(project, String.valueOf(teamInfo.getId()), 1);
}
for (DepartmentInfo departmentInfo : departmentInfoList) {
xzHikvisionCompareDataService.addCompareDataForDepartment(project, departmentInfo.getDepartmentName(), 0, 1, String.valueOf(departmentInfo.getId()));
compareHikvisionForWorker(project, String.valueOf(departmentInfo.getId()), 2);
}
} else {
//isc存在平台也存在
HashSet<String> nameSet = new HashSet<>();
teamList.forEach(teamInfo -> nameSet.add(teamInfo.getTeamName()));
departmentInfoList.forEach(departmentInfo -> nameSet.add(departmentInfo.getDepartmentName()));
listJa.forEach(o -> nameSet.add(((JSONObject) o).getString("orgName")));
Map<String, JSONObject> iscMap = listJa.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("orgName"), o -> (JSONObject) o, (o, o2) -> o2));
Map<String, TeamInfo> myTeamMap = teamList.stream().collect(Collectors.toMap(TeamInfo::getTeamName, Function.identity(), (o, o2) -> o2));
Map<String, DepartmentInfo> myDepartmentMap = departmentInfoList.stream().collect(Collectors.toMap(DepartmentInfo::getDepartmentName, Function.identity(), (o, o2) -> o2));
for (String name : nameSet) {
String index;
Integer type = null;
if (myTeamMap.containsKey(name) && !iscMap.containsKey(name)) {
index = String.valueOf(myTeamMap.get(name).getId());
xzHikvisionCompareDataService.addCompareDataForTeam(project, name, 0, 1, index);
type = 1;
} else if (myDepartmentMap.containsKey(name) && !iscMap.containsKey(name)) {
index = String.valueOf(myDepartmentMap.get(name).getId());
xzHikvisionCompareDataService.addCompareDataForDepartment(project, name, 0, 1, index);
type = 2;
} else if ((!myTeamMap.containsKey(name) && !myDepartmentMap.containsKey(name)) && iscMap.containsKey(name)) {
index = iscMap.get(name).getString("orgIndexCode");
xzHikvisionCompareDataService.addCompareDataForTeam(project, name, 1, 0, index);
type = 1;
} else if (myTeamMap.containsKey(name) && iscMap.containsKey(name)) {
//班组存在和isc存在
index = String.valueOf(myTeamMap.get(name).getId());
type = 1;
} else {
//部门存在和isc存在
index = String.valueOf(myDepartmentMap.get(name).getId());
type = 2;
}
compareHikvisionForWorker(project, index, type);
}
}
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "1");
}
/**
* 对比人员
*
* @param project
* @param orgIndex
* @param type 1班组 2部门
* @throws Exception
*/
private void compareHikvisionForWorker(Project project, String orgIndex, Integer type) throws Exception {
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
param.put("orgIndexCode", orgIndex);
JSONObject rtJo = HikvisionUtil.getWorkerListByOrg(project, param);
IPage<WorkerInfo> workerPage = workerInfoService.selectWorkerInfoList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn())
.put(type == 1, Cts.TEAM_ID, orgIndex)
.put(type == 2, Cts.DEPARTMENT_ID, orgIndex)
.build());
List<WorkerInfo> workerInfoList = workerPage.getRecords();
log.info("数据校验我们平台的人员列表:{}", JSON.toJSONString(workerInfoList));
JSONObject dataJo = HikvisionUtil.getJsonObjectData(rtJo);
JSONArray listJa = dataJo.getJSONArray("list");
if (CollUtil.isEmpty(listJa)) {
for (WorkerInfo workerInfo : workerInfoList) {
xzHikvisionCompareDataService.addCompareDataForWorker(project, workerInfo.getWorkerName(), 0, 1, String.valueOf(workerInfo.getId()), workerInfo.getIdCard());
xzHikvisionCompareDataService.addCompareDataForFace(project, workerInfo.getWorkerName(), 0, 1, String.valueOf(workerInfo.getId()), workerInfo.getIdCard());
}
} else {
//isc存在平台也存在
HashSet<String> idCardSet = new HashSet<>();
workerInfoList.forEach(workerInfo -> idCardSet.add(workerInfo.getIdCard()));
listJa.forEach(o -> idCardSet.add(((JSONObject) o).getString("certificateNo")));
Map<String, JSONObject> iscMap = listJa.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("certificateNo"), o -> (JSONObject) o, (o, o2) -> o2));
Map<String, WorkerInfo> myMap = workerInfoList.stream().collect(Collectors.toMap(WorkerInfo::getIdCard, Function.identity(), (o, o2) -> o2));
for (String idCard : idCardSet) {
if (myMap.containsKey(idCard) && !iscMap.containsKey(idCard)) {
xzHikvisionCompareDataService.addCompareDataForWorker(project, myMap.get(idCard).getWorkerName(), 0, 1, String.valueOf(myMap.get(idCard).getId()), idCard);
WorkerInfo wi = myMap.get(idCard);
if (StrUtil.isNotBlank(wi.getFieldAcquisitionUrl())) {
xzHikvisionCompareDataService.addCompareDataForFace(project, myMap.get(idCard).getWorkerName(), 0, 1, String.valueOf(myMap.get(idCard).getId()), idCard);
}
} else if (!myMap.containsKey(idCard) && iscMap.containsKey(idCard)) {
xzHikvisionCompareDataService.addCompareDataForWorker(project, iscMap.get(idCard).getString("personName"), 1, 0, iscMap.get(idCard).getString("personId"), idCard);
JSONArray ppJa = iscMap.get(idCard).getJSONArray("personPhoto");
if (CollUtil.isNotEmpty(ppJa)) {
xzHikvisionCompareDataService.addCompareDataForFace(project, iscMap.get(idCard).getString("personName"), 1, 0, iscMap.get(idCard).getString("personId"), idCard);
}
} else {
//isc存在平台也存在该人员
boolean myHave = StrUtil.isNotBlank(myMap.get(idCard).getFieldAcquisitionUrl());
boolean iscHave = CollUtil.isNotEmpty(iscMap.get(idCard).getJSONArray("personPhoto"));
if (myHave && !iscHave) {
xzHikvisionCompareDataService.addCompareDataForFace(project, iscMap.get(idCard).getString("personName"), 0, 1, String.valueOf(myMap.get(idCard).getId()), idCard);
} else if (!myHave && iscHave) {
xzHikvisionCompareDataService.addCompareDataForFace(project, iscMap.get(idCard).getString("personName"), 1, 0, String.valueOf(myMap.get(idCard).getId()), idCard);
}
}
}
}
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "2");
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "3");
}
/**
* 对比固定车
*
* @param project
* @throws Exception
*/
public void compareHikvisionForFixCar(Project project) throws Exception {
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
JSONObject rtJo = HikvisionUtil.getFixCarList(project, param);
List<CarInfo> carInfoList = carInfoService.selectCarList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn())
.put("carModuleType", 1)
.put("isBlack", 0)
.build());
JSONObject dataJo = HikvisionUtil.getJsonObjectData(rtJo);
JSONArray listJa = dataJo.getJSONArray("list");
compareAndAddData(project, listJa, carInfoList, 1);
}
/**
* 对比临时车
*
* @param project
* @throws Exception
*/
public void compareHikvisionForReservationCar(Project project) throws Exception {
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
JSONArray listJa = HikvisionUtil.getIscActiveReservationCarList(null, project);
List<CarInfo> carInfoList = carInfoService.selectCarList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn())
.put(Cts.RESERVATION_TYPE, 1)
.put("isBlack", 0)
.build());
log.info("数据校验我们平台的临时车列表:{}", JSON.toJSONString(carInfoList));
compareAndAddData(project, listJa, carInfoList, 2);
}
/**
* 对边黑名单车
*
* @param project
* @throws Exception
*/
public void compareHikvisionForBlackCar(Project project) throws Exception {
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
JSONObject jo = new JSONObject();
jo.put("pageNo", 1);
jo.put("pageSize", 1000);
JSONObject joRs = HikvisionUtil.getBlackCarList(project, jo);
JSONObject dataJo = HikvisionUtil.getJsonObjectData(joRs);
JSONArray listJa = dataJo.getJSONArray("list");
List<CarInfo> carInfoList = carInfoService.selectCarList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn())
.put("isBlack", 1)
.build());
compareAndAddData(project, listJa, carInfoList, 3);
}
/**
* 对比和添加车辆数据
*
* @param project
* @param listJa
* @param carInfoList
* @param carIscExistType
*/
private void compareAndAddData(Project project, JSONArray listJa, List<CarInfo> carInfoList, int carIscExistType) {
if (CollUtil.isEmpty(listJa)) {
for (CarInfo carInfo : carInfoList) {
xzHikvisionCompareDataService.addCompareDataForCar(project, carInfo.getCarNumber(), 0, 1, String.valueOf(carInfo.getId()), null);
}
} else {
//isc存在平台也存在
HashSet<String> carNumberSet = new HashSet<>();
carInfoList.forEach(enterpriseInfo -> carNumberSet.add(enterpriseInfo.getCarNumber()));
listJa.forEach(o -> carNumberSet.add(((JSONObject) o).getString("plateNo")));
Map<String, JSONObject> iscMap = listJa.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("plateNo"), o -> (JSONObject) o, (o, o2) -> o2));
Map<String, CarInfo> myMap = carInfoList.stream().collect(Collectors.toMap(CarInfo::getCarNumber, Function.identity(), (o, o2) -> o2));
for (String carNumber : carNumberSet) {
String uniqueId = null;
if (myMap.containsKey(carNumber) && !iscMap.containsKey(carNumber)) {
uniqueId = String.valueOf(myMap.get(carNumber).getId());
xzHikvisionCompareDataService.addCompareDataForCar(project, carNumber, 0, 1, uniqueId, null);
} else if (!myMap.containsKey(carNumber) && iscMap.containsKey(carNumber)) {
uniqueId = iscMap.get(carNumber).getString("vehicleId");
xzHikvisionCompareDataService.addCompareDataForCar(project, carNumber, 1, 0, uniqueId, carIscExistType);
}
}
}
}
}