131 lines
5.8 KiB
Java
131 lines
5.8 KiB
Java
|
|
package com.zhgd.xmgl.task;
|
|||
|
|
|
|||
|
|
import cn.hutool.core.bean.BeanUtil;
|
|||
|
|
import cn.hutool.core.collection.CollUtil;
|
|||
|
|
import com.alibaba.fastjson.JSONArray;
|
|||
|
|
import com.alibaba.fastjson.JSONObject;
|
|||
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||
|
|
import com.gexin.fastjson.JSON;
|
|||
|
|
import com.zhgd.redis.lock.RedisRepository;
|
|||
|
|
import com.zhgd.xmgl.call.HikvisionCall;
|
|||
|
|
import com.zhgd.xmgl.constant.Cts;
|
|||
|
|
import com.zhgd.xmgl.modules.project.entity.Project;
|
|||
|
|
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
|
|||
|
|
import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo;
|
|||
|
|
import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl;
|
|||
|
|
import com.zhgd.xmgl.modules.x.entity.XzHikvisionCompareData;
|
|||
|
|
import com.zhgd.xmgl.modules.x.mapper.XzHikvisionCompareDataMapper;
|
|||
|
|
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.Set;
|
|||
|
|
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 XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper;
|
|||
|
|
@Lazy
|
|||
|
|
@Autowired
|
|||
|
|
private RedisRepository redisRepository;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 数据校验同步
|
|||
|
|
*/
|
|||
|
|
@SchedulerLock(name = "dataCompare", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
|
|||
|
|
@Scheduled(cron = "0 0 3 * * ?")
|
|||
|
|
@RequestMapping("dataCompare")
|
|||
|
|
public void dataCompare() throws Exception {
|
|||
|
|
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>().eq(Project::getSyncHikvision, 1));
|
|||
|
|
for (Project project : projects) {
|
|||
|
|
compareHikvision(project);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void compareHikvision(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);
|
|||
|
|
if (HikvisionUtil.isSuccess(rtJo)) {
|
|||
|
|
JSONObject dataJo = HikvisionUtil.getJSONObjectData(rtJo);
|
|||
|
|
JSONArray listJa = dataJo.getJSONArray("list");
|
|||
|
|
if (CollUtil.isEmpty(listJa)) {
|
|||
|
|
for (EnterpriseInfo enterpriseInfo : enterpriseInfos) {
|
|||
|
|
XzHikvisionCompareData data = new XzHikvisionCompareData();
|
|||
|
|
data.setProjectSn(project.getProjectSn());
|
|||
|
|
data.setEnterpriseName(enterpriseInfo.getEnterpriseName());
|
|||
|
|
data.setExistIsc(0);
|
|||
|
|
data.setExistMyPlatform(1);
|
|||
|
|
data.setType(1);
|
|||
|
|
data.setOurType(1);
|
|||
|
|
xzHikvisionCompareDataMapper.insert(data);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
HashSet<String> nameSet = new HashSet<>();
|
|||
|
|
enterpriseInfos.forEach(enterpriseInfo -> nameSet.add(enterpriseInfo.getEnterpriseName()));
|
|||
|
|
listJa.forEach(o -> nameSet.add(((JSONObject) o).getString("orgName")));
|
|||
|
|
Set<String> iscSet = listJa.stream().map(o -> ((JSONObject) o).getString("orgName")).collect(Collectors.toSet());
|
|||
|
|
Set<String> mySet = enterpriseInfos.stream().map(EnterpriseInfo::getEnterpriseName).collect(Collectors.toSet());
|
|||
|
|
nameSet.forEach(s -> {
|
|||
|
|
if (mySet.contains(s) || !iscSet.contains(s)) {
|
|||
|
|
XzHikvisionCompareData data = new XzHikvisionCompareData();
|
|||
|
|
data.setProjectSn(project.getProjectSn());
|
|||
|
|
data.setEnterpriseName(s);
|
|||
|
|
data.setExistIsc(0);
|
|||
|
|
data.setExistMyPlatform(1);
|
|||
|
|
data.setType(1);
|
|||
|
|
data.setOurType(1);
|
|||
|
|
xzHikvisionCompareDataMapper.insert(data);
|
|||
|
|
} else if (!mySet.contains(s) || iscSet.contains(s)) {
|
|||
|
|
XzHikvisionCompareData data = new XzHikvisionCompareData();
|
|||
|
|
data.setProjectSn(project.getProjectSn());
|
|||
|
|
data.setEnterpriseName(s);
|
|||
|
|
data.setExistIsc(1);
|
|||
|
|
data.setExistMyPlatform(0);
|
|||
|
|
data.setType(1);
|
|||
|
|
data.setOurType(1);
|
|||
|
|
xzHikvisionCompareDataMapper.insert(data);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
log.error("数据校验同步失败,调用海康ISC获取企业列表失败,projectSn:{} ,err:{}", project.getProjectSn(), JSON.toJSONString(rtJo));
|
|||
|
|
//key:1组织2人员信息3人员照片4车辆信息
|
|||
|
|
addException(project, rtJo);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void addException(Project project, JSONObject rtJo) {
|
|||
|
|
redisRepository.putHashValue(Cts.REDIS_HIKVISION_COMPARE_DATA + project.getProjectSn(), "1", JSONArray.toJSONString(new MapBuilder<String, Object>().put(Cts.SUCCESS, false).put(Cts.MSG, rtJo).build()));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|