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

317 lines
18 KiB
Java
Raw Normal View History

2024-05-30 19:52:54 +08:00
package com.zhgd.xmgl.task;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
2024-05-31 18:47:42 +08:00
import cn.hutool.core.util.StrUtil;
2024-05-30 19:52:54 +08:00
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
2024-05-31 18:47:42 +08:00
import com.baomidou.mybatisplus.core.metadata.IPage;
2024-05-30 19:52:54 +08:00
import com.zhgd.redis.lock.RedisRepository;
import com.zhgd.xmgl.call.HikvisionCall;
import com.zhgd.xmgl.constant.Cts;
2024-05-31 18:47:42 +08:00
import com.zhgd.xmgl.modules.car.entity.CarInfo;
import com.zhgd.xmgl.modules.car.service.impl.CarInfoServiceImpl;
2024-05-30 19:52:54 +08:00
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
2024-05-31 18:47:42 +08:00
import com.zhgd.xmgl.modules.worker.entity.DepartmentInfo;
2024-05-30 19:52:54 +08:00
import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo;
2024-05-31 18:47:42 +08:00
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;
2024-05-30 19:52:54 +08:00
import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl;
2024-05-31 18:47:42 +08:00
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
2024-06-01 18:41:49 +08:00
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionCompareData;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionCompareDataMapper;
import com.zhgd.xmgl.modules.xz.service.IXzHikvisionCompareDataService;
2024-05-30 19:52:54 +08:00
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;
2024-05-31 18:47:42 +08:00
import java.util.Map;
import java.util.function.Function;
2024-05-30 19:52:54 +08:00
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;
2024-05-31 18:47:42 +08:00
@Lazy
@Autowired
private CarInfoServiceImpl carInfoService;
@Lazy
@Autowired
private DepartmentInfoServiceImpl departmentInfoService;
@Lazy
@Autowired
private ITeamInfoService teamInfoService;
@Lazy
@Autowired
private WorkerInfoServiceImpl workerInfoService;
2024-05-30 19:52:54 +08:00
@Lazy
@Autowired
private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper;
@Lazy
@Autowired
private RedisRepository redisRepository;
2024-05-31 18:47:42 +08:00
@Lazy
@Autowired
private IXzHikvisionCompareDataService xzHikvisionCompareDataService;
@Lazy
@Autowired
private DepartmentInfoMapper departmentInfoMapper;
2024-05-30 19:52:54 +08:00
/**
* 数据校验同步
*/
2024-06-01 21:06:55 +08:00
@SchedulerLock(name = "compareData", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
2024-05-30 19:52:54 +08:00
@Scheduled(cron = "0 0 3 * * ?")
2024-06-01 21:06:55 +08:00
@RequestMapping("compareData")
public void compareData() throws Exception {
2024-05-30 19:52:54 +08:00
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>().eq(Project::getSyncHikvision, 1));
for (Project project : projects) {
2024-05-31 18:47:42 +08:00
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());
}
2024-05-30 19:52:54 +08:00
}
}
2024-06-01 21:41:34 +08:00
public void compareHikvisionForCar(Project project) throws Exception {
compareHikvisionForFixCar(project);
compareHikvisionForReservationCar(project);
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "4");
}
2024-06-01 21:06:55 +08:00
public void compareHikvisionForEnterpriseEtc(Project project) throws Exception {
2024-05-30 19:52:54 +08:00
//对比企业
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);
2024-05-31 18:47:42 +08:00
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());
2024-05-30 19:52:54 +08:00
}
2024-05-31 18:47:42 +08:00
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()));
2024-06-01 21:06:55 +08:00
compareHikvisionForWorker(project, String.valueOf(teamInfo.getId()), 1);
2024-05-31 18:47:42 +08:00
}
for (DepartmentInfo departmentInfo : departmentInfoList) {
xzHikvisionCompareDataService.addCompareDataForDepartment(project, departmentInfo.getDepartmentName(), 0, 1, String.valueOf(departmentInfo.getId()));
2024-06-01 21:06:55 +08:00
compareHikvisionForWorker(project, String.valueOf(departmentInfo.getId()), 2);
2024-05-30 19:52:54 +08:00
}
} else {
2024-05-31 18:47:42 +08:00
//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;
2024-06-01 21:06:55 +08:00
Integer type = null;
2024-05-31 18:47:42 +08:00
if (myTeamMap.containsKey(name) && !iscMap.containsKey(name)) {
index = String.valueOf(myTeamMap.get(name).getId());
xzHikvisionCompareDataService.addCompareDataForTeam(project, name, 0, 1, index);
2024-06-01 21:06:55 +08:00
type = 1;
2024-05-31 18:47:42 +08:00
} else if (myDepartmentMap.containsKey(name) && !iscMap.containsKey(name)) {
index = String.valueOf(myDepartmentMap.get(name).getId());
xzHikvisionCompareDataService.addCompareDataForDepartment(project, name, 0, 1, index);
2024-06-01 21:06:55 +08:00
type = 2;
2024-05-31 18:47:42 +08:00
} else if ((!myTeamMap.containsKey(name) && !myDepartmentMap.containsKey(name)) && iscMap.containsKey(name)) {
index = iscMap.get(name).getString("orgIndexCode");
xzHikvisionCompareDataService.addCompareDataForTeam(project, name, 1, 0, index);
2024-06-01 21:06:55 +08:00
type = 1;
} else if (myTeamMap.containsKey(name) && iscMap.containsKey(name)) {
2024-05-31 18:47:42 +08:00
//班组存在和isc存在
index = String.valueOf(myTeamMap.get(name).getId());
2024-06-01 21:06:55 +08:00
type = 1;
} else {
//部门存在和isc存在
index = String.valueOf(myDepartmentMap.get(name).getId());
type = 2;
2024-05-31 18:47:42 +08:00
}
2024-06-01 21:06:55 +08:00
compareHikvisionForWorker(project, index, type);
2024-05-31 18:47:42 +08:00
}
2024-05-30 19:52:54 +08:00
}
2024-05-31 18:47:42 +08:00
xzHikvisionCompareDataService.addSuccessShow(project.getProjectSn(), "1");
2024-05-30 19:52:54 +08:00
}
2024-06-01 21:06:55 +08:00
/**
* @param project
* @param orgIndex
* @param type 1班组 2部门
* @throws Exception
*/
private void compareHikvisionForWorker(Project project, String orgIndex, Integer type) throws Exception {
2024-05-31 18:47:42 +08:00
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
param.put("orgIndexCode", orgIndex);
JSONObject rtJo = hikvisionCall.getWorkerListByOrg(project, param);
2024-06-01 21:06:55 +08:00
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());
2024-05-31 18:47:42 +08:00
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");
2024-05-30 19:52:54 +08:00
}
2024-06-01 21:41:34 +08:00
public void compareHikvisionForFixCar(Project project) throws Exception {
2024-05-31 18:47:42 +08:00
JSONObject param = new JSONObject();
HikvisionUtil.addPageParamIfAbsent(param);
2024-06-01 21:41:34 +08:00
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());
2024-05-31 18:47:42 +08:00
JSONObject dataJo = HikvisionUtil.getJSONObjectData(rtJo);
JSONArray listJa = dataJo.getJSONArray("list");
2024-06-01 21:41:34 +08:00
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) {
2024-05-31 18:47:42 +08:00
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");
2024-06-01 18:40:18 +08:00
xzHikvisionCompareDataService.addCompareDataForCar(project, carNumber, 1, 0, uniqueId);
2024-05-31 18:47:42 +08:00
}
}
}
}
2024-05-30 19:52:54 +08:00
2024-06-01 21:41:34 +08:00
2024-05-30 19:52:54 +08:00
}