移动方法

This commit is contained in:
guoshengxiong 2024-06-05 11:54:09 +08:00
parent 8e129ca026
commit 35b4f5425a
10 changed files with 153 additions and 84 deletions

View File

@ -33,6 +33,7 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Objects;
/**
@ -444,4 +445,14 @@ public class AsyncHikvision {
log.error("海康:", e);
}
}
@Async("getRecordForHikvisionTask")
public void getCrossRecordsAsync(HashMap<String, Object> paramMap) {
hikvisionCall.getCrossRecords(paramMap);
}
@Async("getRecordForHikvisionTask")
public void getDoorEventsAsync(HashMap<String, Object> paramMap) {
hikvisionCall.getDoorEvents(paramMap);
}
}

View File

@ -67,7 +67,6 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
@ -75,7 +74,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -89,7 +87,7 @@ import java.util.*;
@RequestMapping("/xmgl/hikvision")
public class HikvisionCall {
private static final String FIXED_CAR_GROUP_NAME = "业主车辆";
static String pageNo = "pageNo";
public AsyncHikvision asyncHikvision;
@Autowired
XzHikvisionSyncServiceImpl xzHikvisionSyncService;
@Lazy
@ -166,13 +164,10 @@ public class HikvisionCall {
private UfaceDevMapper ufaceDevMapper;
@Autowired
private XzHikvisionSyncMapper xzHikvisionSyncMapper;
@Autowired
private IAiAnalyseHardWareRecordService aiAnalyseHardWareRecordService;
@Autowired
private IFrontierProtectionNoNetDevService frontierProtectionNoNetDevService;
@Lazy
@Autowired
private IAiAnalyseHardWareAlarmRecordService aiAnalyseHardWareAlarmRecordService;
@ -185,12 +180,10 @@ public class HikvisionCall {
@Lazy
@Autowired
private FrontierProtectionNoNetDataServiceImpl frontierProtectionNoNetDataService;
@Lazy
@Autowired
private IXzHikvisionCompareDataService xzHikvisionCompareDataService;
/**
* 获取图片
*
@ -544,7 +537,7 @@ public class HikvisionCall {
.eq(UfaceDev::getProjectSn, project.getProjectSn()));
for (UfaceDev ufaceDev : ufaceDevs) {
param.put("doorIndexCodes", Collections.singletonList(ufaceDev.getDevSn()));
param.put(pageNo, 0);
param.put(Cts.PAGE_NO, 0);
param.put("pageSize", 1000);
Integer total = 0;
JSONArray listJa = new JSONArray();
@ -605,7 +598,7 @@ public class HikvisionCall {
}
}
}
} while (total > param.getInteger(pageNo) * 1000);
} while (total > param.getInteger(Cts.PAGE_NO) * 1000);
}
try {
workerAttendancePresenceService.addNowAllWorkerAttendancePresence(projectSn);
@ -661,10 +654,10 @@ public class HikvisionCall {
param.put("parkSyscode", projectParkCode);
Integer total = 0;
JSONArray listJa = new JSONArray();
param.put(pageNo, 0);
param.put(Cts.PAGE_NO, 0);
do {
String rs = null;
param.put(pageNo, param.getIntValue(pageNo) + 1);
param.put(Cts.PAGE_NO, param.getIntValue(Cts.PAGE_NO) + 1);
try {
rs = getCrossRecordsForHttp(project, param);
} catch (Exception e) {
@ -730,67 +723,11 @@ public class HikvisionCall {
}
}
}
} while (total > param.getInteger(pageNo) * 1000);
} while (total > param.getInteger(Cts.PAGE_NO) * 1000);
}
log.info("服务挂了主动获取车辆事件的车辆通行记录执行完成startTime{}endTime{}", startTime, endTime);
}
/**
* 定时一分钟获取海康数据
*/
@SchedulerLock(name = "getRecordForHikvision", lockAtMostFor = 1000 * 30, lockAtLeastFor = 1000 * 30)
@Scheduled(cron = "0 */1 * * * ?")
@RequestMapping("getRecordForHikvision")
public void getRecordForHikvision() {
String startTime = DateUtil.formatDateTime(DateUtil.offsetMinute(new Date(), -2));
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<>();
map.put("projectSn", project.getProjectSn());
map.put("startTime", startTime);
map.put("endTime", endTime);
hikvisionCall.getDoorEventsAsync(map);
hikvisionCall.getCrossRecordsAsync(map);
}
}
@Async("getRecordForHikvisionTask")
public void getDoorEventsAsync(HashMap<String, Object> paramMap) {
getDoorEvents(paramMap);
}
@Async("getRecordForHikvisionTask")
public void getCrossRecordsAsync(HashMap<String, Object> paramMap) {
getCrossRecords(paramMap);
}
/**
* 定时重试失败的记录
*/
@SchedulerLock(name = "retrySyncHikvision", lockAtMostFor = 1000 * 30, lockAtLeastFor = 1000 * 30)
@Scheduled(cron = "0 */10 * * * ?")
@RequestMapping("retrySyncHikvision")
public void retrySyncHikvision() throws Exception {
HashMap<String, Object> newListMap = new HashMap<>();
newListMap.put("isSuccess", 0);
newListMap.put("createDateBegin", DateUtil.formatDateTime(DateUtil.offsetHour(new Date(), -1)));
List<XzHikvisionSync> newestList = xzHikvisionSyncService.getNewestList(newListMap);
for (XzHikvisionSync xzHikvisionSync : newestList) {
log.info("海康同步的定时重试失败的记录id:{}", xzHikvisionSync.getId());
HashMap<String, Object> retryMap = new HashMap<>();
retryMap.put("id", xzHikvisionSync.getId());
try {
xzHikvisionSyncService.retry(retryMap);
} catch (Exception e) {
log.error("海康同步的定时重试失败的记录:error:", e);
}
}
}
/**
* 获取车辆颜色
*

View File

@ -45,4 +45,5 @@ public interface Cts {
String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
String YYYY_MM_DD = "yyyy-MM-dd";
String TL_AUTH_USER = "authUser";
String PAGE_NO = "pageNo";
}

View File

@ -29,4 +29,5 @@ public interface IProjectCarCameraConfigService extends IService<ProjectCarCamer
void saveProjectCarCameraConfig(ProjectCarCameraConfig projectCarCameraConfig);
boolean isHikvisionConfig(String projectSn);
}

View File

@ -46,14 +46,18 @@ import static com.zhgd.xmgl.async.AsyncHikvision.getSyncTimeWithInitIfAbsent;
@Transactional(rollbackFor = Exception.class)
@Slf4j
public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> implements ICarInfoService {
@Lazy
@Autowired
private XzHikvisionSyncMapper xzHikvisionSyncMapper;
ProjectCarCameraConfigMapper projectCarCameraConfigMapper;
@Autowired
CarInfoApprovalFlowMapper carInfoApprovalFlowMapper;
@Autowired
ProjectMapper projectMapper;
@Autowired
ProjectCarCameraConfigServiceImpl projectCarCameraConfigService;
@Lazy
@Autowired
private XzHikvisionSyncMapper xzHikvisionSyncMapper;
@Autowired
private EnterpriseInfoServiceImpl enterpriseInfoService;
@Autowired
private SystemUserServiceImpl systemUserService;
@ -327,6 +331,11 @@ public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> impl
@Override
public void addCarInfoForHikvision(CarInfo carInfo, AsyncHikvision asyncHikvision) {
boolean hikvisionConfig = projectCarCameraConfigService.isHikvisionConfig(carInfo.getProjectSn());
if (!hikvisionConfig) {
return;
}
if (carInfo.getIsBlack() == 1) {
deleteCarInfoForHikvision(carInfo, true);
} else {
@ -342,6 +351,10 @@ public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> impl
@Override
public void deleteCarInfoForHikvision(CarInfo carInfo, boolean isSetBlack) {
boolean hikvisionConfig = projectCarCameraConfigService.isHikvisionConfig(carInfo.getProjectSn());
if (!hikvisionConfig) {
return;
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(4).setOperate(3).setWhoId(carInfo.getId()).setBigType(2).setCreateDate(getSyncTimeWithInitIfAbsent(2, carInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(5).setOperate(3).setWhoId(carInfo.getId()).setBigType(2).setCreateDate(getSyncTimeWithInitIfAbsent(2, carInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(6).setOperate(3).setWhoId(carInfo.getId()).setBigType(2).setCreateDate(getSyncTimeWithInitIfAbsent(2, carInfo.getId())));
@ -351,6 +364,11 @@ public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> impl
@Override
public void editCarInfoForHikvision(CarInfo carInfo, CarInfo old) {
boolean hikvisionConfig = projectCarCameraConfigService.isHikvisionConfig(carInfo.getProjectSn());
if (!hikvisionConfig) {
return;
}
if (carInfo.getIsBlack() == 1) {
deleteCarInfoForHikvision(carInfo, true);
} else {

View File

@ -15,7 +15,6 @@ import com.zhgd.xmgl.util.RefUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import java.util.HashMap;
import java.util.List;
@ -102,4 +101,13 @@ public class ProjectCarCameraConfigServiceImpl extends ServiceImpl<ProjectCarCam
}
}
@Override
public boolean isHikvisionConfig(String projectSn) {
Integer c = projectCarCameraConfigMapper.selectCount(new LambdaQueryWrapper<ProjectCarCameraConfig>()
.eq(ProjectCarCameraConfig::getProjectSn, projectSn)
.eq(ProjectCarCameraConfig::getSupplierType, 1)
);
return c > 0;
}
}

View File

@ -26,7 +26,9 @@ public interface IProjectUfaceConfigService extends IService<ProjectUfaceConfig>
void deleteWorkerInfo(WorkerInfo workerInfo);
void updateWorkerInfo(WorkerInfo newWorkerInfo,WorkerInfo oldWorkerInfo);
void updateWorkerInfo(WorkerInfo newWorkerInfo, WorkerInfo oldWorkerInfo);
void sendBatchWorkerInfo(WorkerInfo workerInfo, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> list);
boolean isHikvisionConfig(String projectSn);
}

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.async.AsyncHikvision;
import com.zhgd.xmgl.modules.car.entity.ProjectCarCameraConfig;
import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig;
import com.zhgd.xmgl.modules.project.mapper.ProjectUfaceConfigMapper;
import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService;
@ -464,6 +465,15 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
}
}
@Override
public boolean isHikvisionConfig(String projectSn) {
Integer c = baseMapper.selectCount(new LambdaQueryWrapper<ProjectUfaceConfig>()
.eq(ProjectUfaceConfig::getProjectSn, projectSn)
.eq(ProjectUfaceConfig::getSupplierType, 9)
);
return c > 0;
}
public void sendDev(ProjectUfaceConfig tempProjectUfaceConfig, WorkerInfo workerInfo, String devSns, String devIds) {
log.info("supplierType:{}", tempProjectUfaceConfig.getSupplierType());
//1杭州宇泛智能科技,2用jdpush推送,3.mqtt,4.芊熠智能,5佳信捷,6佳信捷新设备

View File

@ -2339,7 +2339,10 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
@Override
public void addWorkerForHikvision(WorkerInfo workerInfo) {
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
boolean hikvisionConfig = projectUfaceConfigService.isHikvisionConfig(workerInfo.getProjectSn());
if (!hikvisionConfig) {
return;
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(1).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(1).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
asyncHikvision.addWorkerForHikvisionAsync(workerInfo);
@ -2347,7 +2350,10 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
@Override
public void deleteWorkerForHikvision(String uniqueId, WorkerInfo workerInfo) {
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
boolean hikvisionConfig = projectUfaceConfigService.isHikvisionConfig(workerInfo.getProjectSn());
if (!hikvisionConfig) {
return;
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(3).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(3).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
asyncHikvision.deleteWorkerForHikvisionAsync(uniqueId, workerInfo);
@ -2355,7 +2361,10 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
@Override
public void editWorkerForHikvision(WorkerInfo workerInfo) {
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
boolean hikvisionConfig = projectUfaceConfigService.isHikvisionConfig(workerInfo.getProjectSn());
if (!hikvisionConfig) {
return;
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(2).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(2).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
asyncHikvision.editWorkerForHikvisionAsync(workerInfo);

View File

@ -2,18 +2,22 @@ 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.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;
@ -23,8 +27,10 @@ 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.MapBuilder;
import lombok.extern.slf4j.Slf4j;
@ -35,18 +41,17 @@ 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.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@RestController
@RequestMapping("xmgl/task")
@RequestMapping(value = {"xmgl/task", "xmgl/hikvision"})
public class HikvisionTask {
@Autowired
XzHikvisionSyncServiceImpl xzHikvisionSyncService;
@Lazy
@Autowired
private HikvisionCall hikvisionCall;
@ -68,7 +73,6 @@ public class HikvisionTask {
@Lazy
@Autowired
private WorkerInfoServiceImpl workerInfoService;
@Lazy
@Autowired
private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper;
@ -81,6 +85,68 @@ public class HikvisionTask {
@Lazy
@Autowired
private DepartmentInfoMapper departmentInfoMapper;
@Lazy
@Autowired
private ProjectCarCameraConfigServiceImpl projectCarCameraConfigService;
@Lazy
@Autowired
private ProjectUfaceConfigServiceImpl projectUfaceConfigService;
@Lazy
@Autowired
private AsyncHikvision asyncHikvision;
/**
* 定时一分钟获取海康数据
*/
@SchedulerLock(name = "getRecordForHikvision", lockAtMostFor = 1000 * 30, lockAtLeastFor = 1000 * 30)
@Scheduled(cron = "0 */1 * * * ?")
@RequestMapping("getRecordForHikvision")
public void getRecordForHikvision() {
String startTime = DateUtil.formatDateTime(DateUtil.offsetMinute(new Date(), -2));
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<>();
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 = "retrySyncHikvision", lockAtMostFor = 1000 * 30, lockAtLeastFor = 1000 * 30)
@Scheduled(cron = "0 */10 * * * ?")
@RequestMapping("retrySyncHikvision")
public void retrySyncHikvision() throws Exception {
HashMap<String, Object> newListMap = new HashMap<>();
newListMap.put("isSuccess", 0);
newListMap.put("createDateBegin", DateUtil.formatDateTime(DateUtil.offsetHour(new Date(), -1)));
List<XzHikvisionSync> newestList = xzHikvisionSyncService.getNewestList(newListMap);
for (XzHikvisionSync xzHikvisionSync : newestList) {
log.info("海康同步的定时重试失败的记录id:{}", xzHikvisionSync.getId());
HashMap<String, Object> retryMap = new HashMap<>();
retryMap.put("id", xzHikvisionSync.getId());
try {
xzHikvisionSyncService.retry(retryMap);
} catch (Exception e) {
log.error("海康同步的定时重试失败的记录:error:", e);
}
}
}
/**
* 数据校验同步
@ -93,8 +159,14 @@ public class HikvisionTask {
for (Project project : projects) {
try {
xzHikvisionCompareDataService.deleteAllCompareData(project);
compareHikvisionForEnterpriseEtc(project);
compareHikvisionForCar(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());