551 lines
28 KiB
Java
551 lines
28 KiB
Java
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);
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
}
|