wisdomisite-java/src/main/java/com/zhgd/xmgl/task/HikvisionTask.java
2024-06-01 21:41:34 +08:00

317 lines
18 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.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.zhgd.redis.lock.RedisRepository;
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.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
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.XzHikvisionCompareData;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionCompareDataMapper;
import com.zhgd.xmgl.modules.xz.service.IXzHikvisionCompareDataService;
import com.zhgd.xmgl.util.HikvisionUtil;
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.HashSet;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@RestController
@RequestMapping("xmgl/task")
public class HikvisionTask {
@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;
/**
* 数据校验同步
*/
@SchedulerLock(name = "compareData", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0 3 * * ?")
@RequestMapping("compareData")
public void compareData() throws Exception {
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>().eq(Project::getSyncHikvision, 1));
for (Project project : projects) {
try {
xzHikvisionCompareDataMapper.delete(new LambdaQueryWrapper<XzHikvisionCompareData>()
.eq(XzHikvisionCompareData::getProjectSn, project.getProjectSn()));
compareHikvisionForEnterpriseEtc(project);
compareHikvisionForCar(project);
} catch (Exception e) {
log.error("数据校验同步失败projectSn:{} ", project.getProjectSn(), e);
xzHikvisionCompareDataService.addExceptionShowIfNull(project.getProjectSn());
}
}
}
public void compareHikvisionForCar(Project project) throws Exception {
compareHikvisionForFixCar(project);
compareHikvisionForReservationCar(project);
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "4");
}
public void compareHikvisionForEnterpriseEtc(Project project) throws Exception {
//对比企业
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
param.put("parentOrgIndexCode", project.getProjectSn());
JSONObject rtJo = hikvisionCall.getSubOrgListByParentOrg(project, param);
List<EnterpriseInfo> enterpriseInfos = BeanUtil.copyToList(enterpriseInfoService.getEnterpriseInfoList(new MapBuilder<String, Object>().put(Cts.PROJECT_SN, project.getProjectSn()).build()), EnterpriseInfo.class);
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()));
}
} 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;
if (myMap.containsKey(name) && !iscMap.containsKey(name)) {
orgIndex = String.valueOf(myMap.get(name).getId());
xzHikvisionCompareDataService.addCompareDataForEnterprise(project, name, 0, 1, orgIndex);
} else if (!myMap.containsKey(name) && iscMap.containsKey(name)) {
orgIndex = iscMap.get(name).getString("orgIndexCode");
xzHikvisionCompareDataService.addCompareDataForEnterprise(project, name, 1, 0, orgIndex);
} else {
orgIndex = String.valueOf(myMap.get(name).getId());
}
compareHikvisionForDepartmentAndTeamEtc(project, orgIndex);
}
}
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "1");
}
private void compareHikvisionForDepartmentAndTeamEtc(Project project, String orgIndex) throws Exception {
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
param.put("parentOrgIndexCode", orgIndex);
JSONObject rtJo = hikvisionCall.getSubOrgListByParentOrg(project, param);
List<TeamInfo> teamList = teamInfoService.getProjectTeamList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn()).put(Cts.ENTERPRISE_ID, orgIndex).build());
List<DepartmentInfo> departmentInfoList = departmentInfoMapper.getDepartmentInfoList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn()).put(Cts.ENTERPRISE_ID, orgIndex).build());
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 = hikvisionCall.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();
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);
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);
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");
}
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)
.build());
JSONObject dataJo = HikvisionUtil.getJSONObjectData(rtJo);
JSONArray listJa = dataJo.getJSONArray("list");
compareAndAddData(project, listJa, carInfoList);
}
public void compareHikvisionForReservationCar(Project project) throws Exception {
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
JSONArray listJa = hikvisionCall.getReservationCarInfoList(null, project);
List<CarInfo> carInfoList = carInfoService.selectCarList(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, project.getProjectSn())
.put(Cts.RESERVATION_TYPE, 1)
.build());
compareAndAddData(project, listJa, carInfoList);
}
private void compareAndAddData(Project project, JSONArray listJa, List<CarInfo> carInfoList) {
if (CollUtil.isEmpty(listJa)) {
for (CarInfo carInfo : carInfoList) {
xzHikvisionCompareDataService.addCompareDataForCar(project, carInfo.getCarNumber(), 0, 1, String.valueOf(carInfo.getId()));
}
} 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);
} else if (!myMap.containsKey(carNumber) && iscMap.containsKey(carNumber)) {
uniqueId = iscMap.get(carNumber).getString("vehicleId");
xzHikvisionCompareDataService.addCompareDataForCar(project, carNumber, 1, 0, uniqueId);
}
}
}
}
}