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 projects = projectMapper.selectList(new LambdaQueryWrapper().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 enterpriseInfos = BeanUtil.copyToList(enterpriseInfoService.getEnterpriseInfoList(new MapBuilder().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 nameSet = new HashSet<>(); enterpriseInfos.forEach(enterpriseInfo -> nameSet.add(enterpriseInfo.getEnterpriseName())); listJa.forEach(o -> nameSet.add(((JSONObject) o).getString("orgName"))); Set iscSet = listJa.stream().map(o -> ((JSONObject) o).getString("orgName")).collect(Collectors.toSet()); Set 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().put(Cts.SUCCESS, false).put(Cts.MSG, rtJo).build())); } }