车辆和ai预警的海康回调的代码修改
This commit is contained in:
parent
060f40e73b
commit
67634867d1
@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|||||||
import com.zhgd.jeecg.common.api.vo.Result;
|
import com.zhgd.jeecg.common.api.vo.Result;
|
||||||
import com.zhgd.jeecg.common.execption.OpenPromptException;
|
import com.zhgd.jeecg.common.execption.OpenPromptException;
|
||||||
import com.zhgd.redis.lock.RedisRepository;
|
import com.zhgd.redis.lock.RedisRepository;
|
||||||
|
import com.zhgd.xmgl.async.AsyncAiAnalyse;
|
||||||
import com.zhgd.xmgl.base.*;
|
import com.zhgd.xmgl.base.*;
|
||||||
import com.zhgd.xmgl.call.entity.ChargeDeletionParam;
|
import com.zhgd.xmgl.call.entity.ChargeDeletionParam;
|
||||||
import com.zhgd.xmgl.modules.basicdata.service.impl.NoticeServiceImpl;
|
import com.zhgd.xmgl.modules.basicdata.service.impl.NoticeServiceImpl;
|
||||||
@ -29,6 +30,10 @@ import com.zhgd.xmgl.modules.frontier.service.IFrontierProtectionDevAlarmService
|
|||||||
import com.zhgd.xmgl.modules.project.entity.Project;
|
import com.zhgd.xmgl.modules.project.entity.Project;
|
||||||
import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig;
|
import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig;
|
||||||
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
|
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
|
||||||
|
import com.zhgd.xmgl.modules.video.entity.AiAnalyseHardWareAlarmRecord;
|
||||||
|
import com.zhgd.xmgl.modules.video.entity.AiAnalyseHardWareRecord;
|
||||||
|
import com.zhgd.xmgl.modules.video.mapper.AiAnalyseHardWareAlarmRecordMapper;
|
||||||
|
import com.zhgd.xmgl.modules.video.mapper.AiAnalyseHardWareRecordMapper;
|
||||||
import com.zhgd.xmgl.modules.video.service.IAiAnalyseHardWareAlarmRecordService;
|
import com.zhgd.xmgl.modules.video.service.IAiAnalyseHardWareAlarmRecordService;
|
||||||
import com.zhgd.xmgl.modules.video.service.IAiAnalyseHardWareRecordService;
|
import com.zhgd.xmgl.modules.video.service.IAiAnalyseHardWareRecordService;
|
||||||
import com.zhgd.xmgl.modules.worker.entity.*;
|
import com.zhgd.xmgl.modules.worker.entity.*;
|
||||||
@ -76,6 +81,12 @@ public class HikvisionCall {
|
|||||||
@Lazy
|
@Lazy
|
||||||
@Autowired
|
@Autowired
|
||||||
HikvisionCall hikvisionCall;
|
HikvisionCall hikvisionCall;
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
|
private AiAnalyseHardWareAlarmRecordMapper aiAnalyseHardWareAlarmRecordMapper;
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
|
private AsyncAiAnalyse asyncAiAnalyse;
|
||||||
@Value("${upload.image.url.prefix:}")
|
@Value("${upload.image.url.prefix:}")
|
||||||
private String imageUrlPrefix;
|
private String imageUrlPrefix;
|
||||||
@Value("${basePath:}")
|
@Value("${basePath:}")
|
||||||
@ -127,15 +138,19 @@ public class HikvisionCall {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IAiAnalyseHardWareRecordService aiAnalyseHardWareRecordService;
|
private IAiAnalyseHardWareRecordService aiAnalyseHardWareRecordService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private IAiAnalyseHardWareAlarmRecordService aiAnalyseHardWareAlarmRecordService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IFrontierProtectionDevAlarmService frontierProtectionDevAlarmService;
|
private IFrontierProtectionDevAlarmService frontierProtectionDevAlarmService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FrontierProtectionDevService frontierProtectionDevService;
|
private FrontierProtectionDevService frontierProtectionDevService;
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
|
private IAiAnalyseHardWareAlarmRecordService aiAnalyseHardWareAlarmRecordService;
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
|
private AiAnalyseHardWareRecordMapper aiAnalyseHardWareRecordMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取图片
|
* 获取图片
|
||||||
*
|
*
|
||||||
@ -176,15 +191,15 @@ public class HikvisionCall {
|
|||||||
for (int i = 0; i < eventsJa.size(); i++) {
|
for (int i = 0; i < eventsJa.size(); i++) {
|
||||||
JSONObject jo1 = eventsJa.getJSONObject(i);
|
JSONObject jo1 = eventsJa.getJSONObject(i);
|
||||||
JSONObject dataJo = jo1.getJSONObject("data");
|
JSONObject dataJo = jo1.getJSONObject("data");
|
||||||
String happenTime = jo1.getString("happenTime");
|
|
||||||
String srcIndex = jo1.getString("srcIndex");
|
|
||||||
String extEventPersonNo = dataJo.getString("ExtEventPersonNo");
|
String extEventPersonNo = dataJo.getString("ExtEventPersonNo");
|
||||||
String extEventCardNo = dataJo.getString("ExtEventCardNo");
|
|
||||||
WorkerInfo workerInfo = workerInfoMapper.selectById(extEventPersonNo);
|
WorkerInfo workerInfo = workerInfoMapper.selectById(extEventPersonNo);
|
||||||
if (workerInfo == null) {
|
if (workerInfo == null) {
|
||||||
log.info("未找到该人员信息,extEventPersonNo:{}", extEventPersonNo);
|
log.info("未找到该人员信息,extEventPersonNo:{}", extEventPersonNo);
|
||||||
return Result.error("未找到该人员信息,extEventPersonNo:" + extEventPersonNo);
|
return Result.error("未找到该人员信息,extEventPersonNo:" + extEventPersonNo);
|
||||||
}
|
}
|
||||||
|
String happenTime = jo1.getString("happenTime");
|
||||||
|
String extEventCardNo = dataJo.getString("ExtEventCardNo");
|
||||||
|
String srcIndex = jo1.getString("srcIndex");
|
||||||
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
|
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
|
||||||
String idCard = workerInfo.getIdCard();
|
String idCard = workerInfo.getIdCard();
|
||||||
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
||||||
@ -198,10 +213,7 @@ public class HikvisionCall {
|
|||||||
log.error("请先上传对应设备信息,idCard:{},devSN:{}", idCard, srcIndex);
|
log.error("请先上传对应设备信息,idCard:{},devSN:{}", idCard, srcIndex);
|
||||||
return Result.error("请先上传对应设备信息,idCard:" + idCard + ",extEventCardNo:" + extEventCardNo);
|
return Result.error("请先上传对应设备信息,idCard:" + idCard + ",extEventCardNo:" + extEventCardNo);
|
||||||
}
|
}
|
||||||
HashMap<String, Object> map = new HashMap<>();
|
|
||||||
String time = DateUtil.formatDateTime(DateUtil.parse(happenTime));
|
String time = DateUtil.formatDateTime(DateUtil.parse(happenTime));
|
||||||
map.put("passTime", time);
|
|
||||||
map.put("idCard", idCard);
|
|
||||||
Integer count = workerAttendanceMapper.selectCount(new LambdaQueryWrapper<WorkerAttendance>()
|
Integer count = workerAttendanceMapper.selectCount(new LambdaQueryWrapper<WorkerAttendance>()
|
||||||
.eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn())
|
.eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn())
|
||||||
.eq(WorkerAttendance::getCreateTime, time)
|
.eq(WorkerAttendance::getCreateTime, time)
|
||||||
@ -209,23 +221,8 @@ public class HikvisionCall {
|
|||||||
if (count != 0) {
|
if (count != 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
map.put("attendanceNumber", workerInfo.getAttendanceNumber());
|
|
||||||
int passType = workerAttendanceServiceImpl.getPassType(ufaceDev, time);
|
int passType = workerAttendanceServiceImpl.getPassType(ufaceDev, time);
|
||||||
map.put("direction", passType);
|
hikvisionCall.saveEventCallbackAttendanceAsync(dataJo, workerInfo, srcIndex, project, idCard, time, passType);
|
||||||
map.put("passType", 2);
|
|
||||||
map.put("projectCode", workerInfo.getProjectSn());
|
|
||||||
map.put("devCode", srcIndex);
|
|
||||||
try {
|
|
||||||
String extEventPictureURL = dataJo.getString("ExtEventPictureURL");
|
|
||||||
String svrIndexCode = dataJo.getString("svrIndexCode");
|
|
||||||
HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq();
|
|
||||||
rq.setPicUri(extEventPictureURL);
|
|
||||||
rq.setSvrIndexCode(svrIndexCode);
|
|
||||||
map.put("faceUrl", saveToLocal(getHikvisionEventsPicture(rq, project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("error:", e);
|
|
||||||
}
|
|
||||||
workerAttendanceService.saveExternalPassRecord(map);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (Objects.equals(ability, "event_pms")) {
|
} else if (Objects.equals(ability, "event_pms")) {
|
||||||
@ -269,55 +266,7 @@ public class HikvisionCall {
|
|||||||
//carPassRecordMapper.updateById(carPassRecord);
|
//carPassRecordMapper.updateById(carPassRecord);
|
||||||
} else if (eventType == 771760130 || eventType == 771760133) {
|
} else if (eventType == 771760130 || eventType == 771760133) {
|
||||||
//压线事件
|
//压线事件
|
||||||
CarPassRecord carPassRecord = new CarPassRecord();
|
hikvisionCall.saveEventCallbackCarPassRecordAsync(dataJo, srcIndex, plateNo, carCamera, project, time);
|
||||||
carPassRecord.setCarNumber(plateNo);
|
|
||||||
carPassRecord.setType(getPassType(carCamera.getPassType()));
|
|
||||||
carPassRecord.setPassTime(time);
|
|
||||||
try {
|
|
||||||
//车牌
|
|
||||||
JSONObject picUrlJo = dataJo.getJSONObject("picUrl");
|
|
||||||
String svrIndex = dataJo.getString("svrIndex");
|
|
||||||
String vehiclePicUrl = picUrlJo.getString("vehiclePicUrl");
|
|
||||||
String platePicUrl = picUrlJo.getString("platePicUrl");
|
|
||||||
if (StringUtils.isNotBlank(platePicUrl)) {
|
|
||||||
carPassRecord.setImageUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(svrIndex, platePicUrl), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
|
||||||
}
|
|
||||||
if (StringUtils.isNotBlank(vehiclePicUrl)) {
|
|
||||||
carPassRecord.setPanoramaUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(svrIndex, vehiclePicUrl), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("error:", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
carPassRecord.setCarColor(getCarColor(dataJo.getInteger("plateColor")));
|
|
||||||
carPassRecord.setLocation(carCamera.getCameraName());
|
|
||||||
carPassRecord.setProjectSn(carCamera.getProjectSn());
|
|
||||||
carPassRecord.setColor(getColor(dataJo.getInteger("vehicleColor")));
|
|
||||||
carPassRecord.setCameraId(srcIndex);
|
|
||||||
List<CarInfo> carInfos = carInfoMapper.selectList(new LambdaQueryWrapper<CarInfo>()
|
|
||||||
.eq(CarInfo::getProjectSn, carCamera.getProjectSn())
|
|
||||||
.eq(CarInfo::getCarNumber, plateNo)
|
|
||||||
.eq(CarInfo::getIsBlack, 0)
|
|
||||||
);
|
|
||||||
if (CollUtil.isNotEmpty(carInfos)) {
|
|
||||||
carPassRecord.setIsOpen(1);
|
|
||||||
} else {
|
|
||||||
carPassRecord.setIsOpen(0);
|
|
||||||
}
|
|
||||||
LambdaQueryWrapper<CarPassRecord> queryWrapper = new LambdaQueryWrapper<CarPassRecord>()
|
|
||||||
.eq(CarPassRecord::getCarNumber, plateNo)
|
|
||||||
.eq(CarPassRecord::getPassTime, time);
|
|
||||||
Integer count = carPassRecordMapper.selectCount(queryWrapper);
|
|
||||||
if (count != 0) {
|
|
||||||
carPassRecordMapper.update(carPassRecord, queryWrapper);
|
|
||||||
} else {
|
|
||||||
carPassRecordMapper.insert(carPassRecord);
|
|
||||||
}
|
|
||||||
//车进场后,意味着绑定的司机走过了人脸机,统计为在场人员。车辆出场后,在场人员随之减少
|
|
||||||
if (carInfos.size() != 0 && carInfos.get(0) != null && StringUtils.isNotEmpty(carInfos.get(0).getDriverWorkerId())) {
|
|
||||||
log.info("保存车辆绑定的司机的通行数据,车牌号:{}", carInfos.get(0).getCarNumber());
|
|
||||||
carPassRecordService.saveDriverPassData(carPassRecord, carInfos.get(0));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -336,40 +285,127 @@ public class HikvisionCall {
|
|||||||
// frontierProtectionDevAlarmService.saveBatch(frontierProtectionDevAlarmList);
|
// frontierProtectionDevAlarmService.saveBatch(frontierProtectionDevAlarmList);
|
||||||
|
|
||||||
} else if (Objects.equals(ability, "")) {
|
} else if (Objects.equals(ability, "")) {
|
||||||
JSONArray eventsArray = paramsJo.getJSONArray("events");
|
log.info("AI识别告警=======" + paramsJo);
|
||||||
if (eventsArray.size()>0 ){
|
JSONArray eventsArray = paramsJo.getJSONArray("events");
|
||||||
JSONObject dataEvent = (JSONObject) eventsArray.get(0);
|
if (eventsArray.size() > 0) {
|
||||||
JSONArray eventDetails = dataEvent.getJSONArray("eventDetails");
|
JSONObject dataEvent = eventsArray.getJSONObject(0);
|
||||||
JSONObject eventDetail = (JSONObject) eventDetails.get(0);
|
JSONArray eventDetails = dataEvent.getJSONArray("eventDetails");
|
||||||
|
JSONObject eventDetail = eventDetails.getJSONObject(0);
|
||||||
ability = eventDetail.getString("ability");
|
ability = eventDetail.getString("ability");
|
||||||
if (Objects.equals(ability, "event_vss")){
|
if (Objects.equals(ability, "event_vss")) {
|
||||||
log.info("AI识别告警=======" + paramsJo);
|
log.info("AI识别告警=======" + paramsJo);
|
||||||
String srcName = eventDetail.getString("srcName");//摄像机名称
|
String srcName = eventDetail.getString("srcName");//摄像机名称
|
||||||
String eventType = eventDetail.getString("eventType");//422000003
|
String eventType = eventDetail.getString("eventType");//422000003
|
||||||
JSONObject data = eventDetail.getJSONObject("data");
|
JSONObject data = eventDetail.getJSONObject("data");
|
||||||
String imageUrl = data.getString("url"); //海康AI图片地址
|
String imageUrl = data.getString("url"); //海康AI图片地址
|
||||||
|
String deviceID = data.getString("deviceID"); //海康AI图片地址
|
||||||
|
AiAnalyseHardWareRecord dev = aiAnalyseHardWareRecordMapper.selectOne(new LambdaQueryWrapper<AiAnalyseHardWareRecord>()
|
||||||
|
.eq(AiAnalyseHardWareRecord::getHardwareId, deviceID));
|
||||||
|
if (dev == null) {
|
||||||
|
log.info("未查到AI识别告警设备,设备id:{}", deviceID);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
hikvisionCall.saveEventCallbackAiAsync(dataEvent, srcName, eventType, imageUrl, deviceID, dev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// JSONArray eventsJa = paramsJo.getJSONArray("events");
|
|
||||||
// List<AiAnalyseHardWareAlarmRecord> aiAnalyseHardWareAlarmRecords = new ArrayList<>();
|
|
||||||
// for (int i = 0; i < eventsJa.size(); i++) {
|
|
||||||
// JSONObject obj = eventsJa.getJSONObject(i);
|
|
||||||
// String devCode = obj.getString("srcIndex");
|
|
||||||
// AiAnalyseHardWareRecord aiAnalyseHardWareRecord = aiAnalyseHardWareRecordService.getOne(Wrappers.<AiAnalyseHardWareRecord>lambdaQuery().eq(AiAnalyseHardWareRecord::getHardwareId, devCode));
|
|
||||||
// AiAnalyseHardWareAlarmRecord aiAnalyseHardWareAlarmRecord = new AiAnalyseHardWareAlarmRecord();
|
|
||||||
// aiAnalyseHardWareAlarmRecord.setHardwareId(aiAnalyseHardWareRecord.getHardwareId());
|
|
||||||
// aiAnalyseHardWareAlarmRecord.setStatus(1);
|
|
||||||
// aiAnalyseHardWareAlarmRecord.setProjectSn(aiAnalyseHardWareRecord.getProjectSn());
|
|
||||||
// aiAnalyseHardWareAlarmRecords.add(aiAnalyseHardWareAlarmRecord);
|
|
||||||
// }
|
|
||||||
// aiAnalyseHardWareAlarmRecordService.saveBatch(aiAnalyseHardWareAlarmRecords);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Result.ok();
|
return Result.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Async("saveEventCallbackAiAsync")
|
||||||
|
public void saveEventCallbackAiAsync(JSONObject dataEvent, String srcName, String eventType, String imageUrl, String deviceID, AiAnalyseHardWareRecord dev) {
|
||||||
|
String happenTime = dataEvent.getString("happenTime");
|
||||||
|
AiAnalyseHardWareAlarmRecord aiAnalyseHardWareAlarmRecord = new AiAnalyseHardWareAlarmRecord();
|
||||||
|
aiAnalyseHardWareAlarmRecord.setCreateTime(DateUtil.formatDateTime(DateUtil.parse(happenTime)));
|
||||||
|
aiAnalyseHardWareAlarmRecord.setAlarmType(Integer.valueOf(eventType));
|
||||||
|
aiAnalyseHardWareAlarmRecord.setHardwareId(deviceID);
|
||||||
|
aiAnalyseHardWareAlarmRecord.setHardwareName(dev.getHardwareName());
|
||||||
|
aiAnalyseHardWareAlarmRecord.setLocation(srcName);
|
||||||
|
aiAnalyseHardWareAlarmRecord.setProjectSn(dev.getProjectSn());
|
||||||
|
aiAnalyseHardWareAlarmRecord.setStatus(1);
|
||||||
|
aiAnalyseHardWareAlarmRecord.setImageUrl(saveToLocal(imageUrl));
|
||||||
|
aiAnalyseHardWareAlarmRecordMapper.insert(aiAnalyseHardWareAlarmRecord);
|
||||||
|
//将数据通过MQTT转发到前台
|
||||||
|
asyncAiAnalyse.sendAiAnalyse(aiAnalyseHardWareAlarmRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Async("saveEventCallbackCarPassRecord")
|
||||||
|
public void saveEventCallbackCarPassRecordAsync(JSONObject dataJo, String srcIndex, String plateNo, CarCamera carCamera, Project project, String time) {
|
||||||
|
CarPassRecord carPassRecord = new CarPassRecord();
|
||||||
|
carPassRecord.setCarNumber(plateNo);
|
||||||
|
carPassRecord.setType(getPassType(carCamera.getPassType()));
|
||||||
|
carPassRecord.setPassTime(time);
|
||||||
|
try {
|
||||||
|
//车牌
|
||||||
|
JSONObject picUrlJo = dataJo.getJSONObject("picUrl");
|
||||||
|
String svrIndex = dataJo.getString("svrIndex");
|
||||||
|
String vehiclePicUrl = picUrlJo.getString("vehiclePicUrl");
|
||||||
|
String platePicUrl = picUrlJo.getString("platePicUrl");
|
||||||
|
if (StringUtils.isNotBlank(platePicUrl)) {
|
||||||
|
carPassRecord.setImageUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(svrIndex, platePicUrl), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(vehiclePicUrl)) {
|
||||||
|
carPassRecord.setPanoramaUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(svrIndex, vehiclePicUrl), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("error:", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
carPassRecord.setCarColor(getCarColor(dataJo.getInteger("plateColor")));
|
||||||
|
carPassRecord.setLocation(carCamera.getCameraName());
|
||||||
|
carPassRecord.setProjectSn(carCamera.getProjectSn());
|
||||||
|
carPassRecord.setColor(getColor(dataJo.getInteger("vehicleColor")));
|
||||||
|
carPassRecord.setCameraId(srcIndex);
|
||||||
|
List<CarInfo> carInfos = carInfoMapper.selectList(new LambdaQueryWrapper<CarInfo>()
|
||||||
|
.eq(CarInfo::getProjectSn, carCamera.getProjectSn())
|
||||||
|
.eq(CarInfo::getCarNumber, plateNo)
|
||||||
|
.eq(CarInfo::getIsBlack, 0)
|
||||||
|
);
|
||||||
|
if (CollUtil.isNotEmpty(carInfos)) {
|
||||||
|
carPassRecord.setIsOpen(1);
|
||||||
|
} else {
|
||||||
|
carPassRecord.setIsOpen(0);
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<CarPassRecord> queryWrapper = new LambdaQueryWrapper<CarPassRecord>()
|
||||||
|
.eq(CarPassRecord::getCarNumber, plateNo)
|
||||||
|
.eq(CarPassRecord::getPassTime, time);
|
||||||
|
Integer count = carPassRecordMapper.selectCount(queryWrapper);
|
||||||
|
if (count != 0) {
|
||||||
|
carPassRecordMapper.update(carPassRecord, queryWrapper);
|
||||||
|
} else {
|
||||||
|
carPassRecordMapper.insert(carPassRecord);
|
||||||
|
}
|
||||||
|
//车进场后,意味着绑定的司机走过了人脸机,统计为在场人员。车辆出场后,在场人员随之减少
|
||||||
|
if (carInfos.size() != 0 && carInfos.get(0) != null && StringUtils.isNotEmpty(carInfos.get(0).getDriverWorkerId())) {
|
||||||
|
log.info("保存车辆绑定的司机的通行数据,车牌号:{}", carInfos.get(0).getCarNumber());
|
||||||
|
carPassRecordService.saveDriverPassData(carPassRecord, carInfos.get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Async("saveEventCallbackAttendance")
|
||||||
|
public void saveEventCallbackAttendanceAsync(JSONObject dataJo, WorkerInfo workerInfo, String srcIndex, Project project, String idCard, String time, int passType) {
|
||||||
|
HashMap<String, Object> map = new HashMap<>();
|
||||||
|
map.put("passTime", time);
|
||||||
|
map.put("idCard", idCard);
|
||||||
|
map.put("attendanceNumber", workerInfo.getAttendanceNumber());
|
||||||
|
map.put("direction", passType);
|
||||||
|
map.put("passType", 2);
|
||||||
|
map.put("projectCode", workerInfo.getProjectSn());
|
||||||
|
map.put("devCode", srcIndex);
|
||||||
|
try {
|
||||||
|
String extEventPictureURL = dataJo.getString("ExtEventPictureURL");
|
||||||
|
String svrIndexCode = dataJo.getString("svrIndexCode");
|
||||||
|
HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq();
|
||||||
|
rq.setPicUri(extEventPictureURL);
|
||||||
|
rq.setSvrIndexCode(svrIndexCode);
|
||||||
|
map.put("faceUrl", saveToLocal(getHikvisionEventsPicture(rq, project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("error:", e);
|
||||||
|
}
|
||||||
|
workerAttendanceService.saveExternalPassRecord(map);
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "按事件类型订阅事件", notes = "按事件类型订阅事件", httpMethod = "POST")
|
@ApiOperation(value = "按事件类型订阅事件", notes = "按事件类型订阅事件", httpMethod = "POST")
|
||||||
@PostMapping(value = "/subscribeEvent")
|
@PostMapping(value = "/subscribeEvent")
|
||||||
public Result subscribeEvent(@ApiIgnore @RequestBody SubscribeEventQo qo) throws Exception {
|
public Result subscribeEvent(@ApiIgnore @RequestBody SubscribeEventQo qo) throws Exception {
|
||||||
@ -405,6 +441,12 @@ public class HikvisionCall {
|
|||||||
if (CollUtil.isEmpty(projects)) {
|
if (CollUtil.isEmpty(projects)) {
|
||||||
return Result.error("项目未配置海康同步功能");
|
return Result.error("项目未配置海康同步功能");
|
||||||
}
|
}
|
||||||
|
getDoorEventsAsync(startTime, endTime, param, projectSn, projects);
|
||||||
|
return Result.ok("已在后台同步人员数据,请耐心等待!");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Async("getDoorEvents")
|
||||||
|
public void getDoorEventsAsync(String startTime, String endTime, JSONObject param, String projectSn, List<Project> projects) {
|
||||||
CompletableFuture.runAsync(() -> {
|
CompletableFuture.runAsync(() -> {
|
||||||
for (Project project : projects) {
|
for (Project project : projects) {
|
||||||
List<UfaceDev> ufaceDevs = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
|
List<UfaceDev> ufaceDevs = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
|
||||||
@ -490,7 +532,6 @@ public class HikvisionCall {
|
|||||||
}
|
}
|
||||||
log.info("服务挂了主动获取门禁点事件的人员通行记录执行完成,startTime:{},endTime:{}", startTime, endTime);
|
log.info("服务挂了主动获取门禁点事件的人员通行记录执行完成,startTime:{},endTime:{}", startTime, endTime);
|
||||||
});
|
});
|
||||||
return Result.ok("已在后台同步人员数据,请耐心等待!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "服务挂了主动获取查询过车记录", notes = "服务挂了主动获取查询过车记录", httpMethod = "POST")
|
@ApiOperation(value = "服务挂了主动获取查询过车记录", notes = "服务挂了主动获取查询过车记录", httpMethod = "POST")
|
||||||
@ -518,98 +559,101 @@ public class HikvisionCall {
|
|||||||
if (CollUtil.isEmpty(projects)) {
|
if (CollUtil.isEmpty(projects)) {
|
||||||
return Result.error("项目未配置海康同步功能");
|
return Result.error("项目未配置海康同步功能");
|
||||||
}
|
}
|
||||||
CompletableFuture.runAsync(() -> {
|
hikvisionCall.getCrossRecordsAsync(startTime, endTime, param, projects);
|
||||||
for (Project project : projects) {
|
return Result.ok("已在后台同步车辆通行数据,请耐心等待!");
|
||||||
param.put("pageNo", 1);
|
}
|
||||||
String projectParkCode = null;
|
|
||||||
|
@Async("getCrossRecords")
|
||||||
|
public void getCrossRecordsAsync(String startTime, String endTime, JSONObject param, List<Project> projects) {
|
||||||
|
for (Project project : projects) {
|
||||||
|
param.put("pageNo", 1);
|
||||||
|
String projectParkCode = null;
|
||||||
|
try {
|
||||||
|
projectParkCode = getProjectParkCode(project);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("err:", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(projectParkCode)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
param.put("parkSyscode", projectParkCode);
|
||||||
|
Integer total = 0;
|
||||||
|
JSONArray listJa = new JSONArray();
|
||||||
|
do {
|
||||||
|
String rs = null;
|
||||||
try {
|
try {
|
||||||
projectParkCode = getProjectParkCode(project);
|
rs = getCrossRecordsForHttp(project, param);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("err:", e);
|
log.error("err:", e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.isBlank(projectParkCode)) {
|
JSONObject joData = HikvisionUtil.getJSONObjectData(rs);
|
||||||
continue;
|
if (joData != null) {
|
||||||
}
|
total = joData.getInteger("total");
|
||||||
param.put("parkSyscode", projectParkCode);
|
if (!Objects.equals(total, 0)) {
|
||||||
Integer total = 0;
|
listJa = joData.getJSONArray("list");
|
||||||
JSONArray listJa = new JSONArray();
|
for (int i = 0; i < listJa.size(); i++) {
|
||||||
do {
|
JSONObject listJo = listJa.getJSONObject(i);
|
||||||
String rs = null;
|
String plateNo = listJo.getString("plateNo");
|
||||||
try {
|
String roadwaySyscode = listJo.getString("roadwaySyscode");
|
||||||
rs = getCrossRecordsForHttp(project, param);
|
String aswSyscode = listJo.getString("aswSyscode");
|
||||||
} catch (Exception e) {
|
String crossTime = listJo.getString("crossTime");
|
||||||
log.error("err:", e);
|
String time = DateUtil.formatDateTime(DateUtil.parse(crossTime));
|
||||||
return;
|
String plateNoPicUri = listJo.getString("plateNoPicUri");
|
||||||
}
|
String vehiclePicUri = listJo.getString("vehiclePicUri");
|
||||||
JSONObject joData = HikvisionUtil.getJSONObjectData(rs);
|
CarCamera carCamera = carCameraMapper.selectOne(new LambdaQueryWrapper<CarCamera>()
|
||||||
if (joData != null) {
|
.eq(CarCamera::getCameraId, roadwaySyscode));
|
||||||
total = joData.getInteger("total");
|
if (carCamera == null) {
|
||||||
if (!Objects.equals(total, 0)) {
|
log.info("海康车辆相机设备不存在:CameraId:{}", roadwaySyscode);
|
||||||
listJa = joData.getJSONArray("list");
|
continue;
|
||||||
for (int i = 0; i < listJa.size(); i++) {
|
}
|
||||||
JSONObject listJo = listJa.getJSONObject(i);
|
CarPassRecord entity = new CarPassRecord();
|
||||||
String plateNo = listJo.getString("plateNo");
|
entity.setCarNumber(plateNo);
|
||||||
String roadwaySyscode = listJo.getString("roadwaySyscode");
|
entity.setType(getPassType(carCamera.getPassType()));
|
||||||
String aswSyscode = listJo.getString("aswSyscode");
|
entity.setPassTime(time);
|
||||||
String crossTime = listJo.getString("crossTime");
|
|
||||||
String time = DateUtil.formatDateTime(DateUtil.parse(crossTime));
|
try {
|
||||||
String plateNoPicUri = listJo.getString("plateNoPicUri");
|
//车牌
|
||||||
String vehiclePicUri = listJo.getString("vehiclePicUri");
|
entity.setImageUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(aswSyscode, plateNoPicUri), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
||||||
CarCamera carCamera = carCameraMapper.selectOne(new LambdaQueryWrapper<CarCamera>()
|
entity.setPanoramaUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(aswSyscode, vehiclePicUri), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
||||||
.eq(CarCamera::getCameraId, roadwaySyscode));
|
} catch (Exception e) {
|
||||||
if (carCamera == null) {
|
log.error("error:", e);
|
||||||
log.info("海康车辆相机设备不存在:CameraId:{}", roadwaySyscode);
|
}
|
||||||
continue;
|
|
||||||
}
|
entity.setCarColor(getCarColor(listJo.getInteger("plateColor")));
|
||||||
CarPassRecord entity = new CarPassRecord();
|
entity.setLocation(carCamera.getCameraName());
|
||||||
entity.setCarNumber(plateNo);
|
entity.setProjectSn(carCamera.getProjectSn());
|
||||||
entity.setType(getPassType(carCamera.getPassType()));
|
entity.setColor(getColor(listJo.getInteger("vehicleColor")));
|
||||||
entity.setPassTime(time);
|
entity.setCameraId(roadwaySyscode);
|
||||||
|
List<CarInfo> carInfos = carInfoMapper.selectList(new LambdaQueryWrapper<CarInfo>()
|
||||||
try {
|
.eq(CarInfo::getProjectSn, carCamera.getProjectSn())
|
||||||
//车牌
|
.eq(CarInfo::getCarNumber, plateNo)
|
||||||
entity.setImageUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(aswSyscode, plateNoPicUri), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
.eq(CarInfo::getIsBlack, 0)
|
||||||
entity.setPanoramaUrl(saveToLocal(getHikvisionEventsPicture(new HikvisionEventsPictureRq(aswSyscode, vehiclePicUri), project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())));
|
);
|
||||||
} catch (Exception e) {
|
if (CollUtil.isNotEmpty(carInfos)) {
|
||||||
log.error("error:", e);
|
entity.setIsOpen(1);
|
||||||
}
|
} else {
|
||||||
|
entity.setIsOpen(0);
|
||||||
entity.setCarColor(getCarColor(listJo.getInteger("plateColor")));
|
}
|
||||||
entity.setLocation(carCamera.getCameraName());
|
Integer count1 = carPassRecordMapper.selectCount(new LambdaQueryWrapper<CarPassRecord>()
|
||||||
entity.setProjectSn(carCamera.getProjectSn());
|
.eq(CarPassRecord::getCarNumber, plateNo)
|
||||||
entity.setColor(getColor(listJo.getInteger("vehicleColor")));
|
.eq(CarPassRecord::getPassTime, time)
|
||||||
entity.setCameraId(roadwaySyscode);
|
);
|
||||||
List<CarInfo> carInfos = carInfoMapper.selectList(new LambdaQueryWrapper<CarInfo>()
|
if (count1 != 0) {
|
||||||
.eq(CarInfo::getProjectSn, carCamera.getProjectSn())
|
carPassRecordMapper.update(entity, new LambdaQueryWrapper<CarPassRecord>()
|
||||||
.eq(CarInfo::getCarNumber, plateNo)
|
.eq(CarPassRecord::getCarNumber, plateNo)
|
||||||
.eq(CarInfo::getIsBlack, 0)
|
.eq(CarPassRecord::getPassTime, time));
|
||||||
);
|
} else {
|
||||||
if (CollUtil.isNotEmpty(carInfos)) {
|
carPassRecordMapper.insert(entity);
|
||||||
entity.setIsOpen(1);
|
|
||||||
} else {
|
|
||||||
entity.setIsOpen(0);
|
|
||||||
}
|
|
||||||
Integer count1 = carPassRecordMapper.selectCount(new LambdaQueryWrapper<CarPassRecord>()
|
|
||||||
.eq(CarPassRecord::getCarNumber, plateNo)
|
|
||||||
.eq(CarPassRecord::getPassTime, time)
|
|
||||||
);
|
|
||||||
if (count1 != 0) {
|
|
||||||
carPassRecordMapper.update(entity, new LambdaQueryWrapper<CarPassRecord>()
|
|
||||||
.eq(CarPassRecord::getCarNumber, plateNo)
|
|
||||||
.eq(CarPassRecord::getPassTime, time));
|
|
||||||
} else {
|
|
||||||
carPassRecordMapper.insert(entity);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
param.put("pageNo", param.getIntValue("pageNo") + 1);
|
|
||||||
}
|
}
|
||||||
|
param.put("pageNo", param.getIntValue("pageNo") + 1);
|
||||||
}
|
}
|
||||||
} while (total > 0 && listJa.size() > 0);
|
}
|
||||||
}
|
} while (total > 0 && listJa.size() > 0);
|
||||||
log.info("服务挂了主动获取车辆事件的车辆通行记录执行完成,startTime:{},endTime:{}", startTime, endTime);
|
}
|
||||||
});
|
log.info("服务挂了主动获取车辆事件的车辆通行记录执行完成,startTime:{},endTime:{}", startTime, endTime);
|
||||||
return Result.ok("已在后台同步车辆通行数据,请耐心等待!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2088,25 +2132,15 @@ public class HikvisionCall {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
String fileName = IdUtil.simpleUUID() + ".png";
|
String fileName = IdUtil.simpleUUID() + ".png";
|
||||||
CompletableFuture.runAsync(() -> {
|
try {
|
||||||
try {
|
X509TrustManagerUtil.downLoadFromUrl(url, fileName, basePath);
|
||||||
downLoadImg(url, fileName);
|
} catch (Exception e) {
|
||||||
} catch (Exception e) {
|
log.error("下载海康图片出现异常:" + e);
|
||||||
log.error("下载图片失败,url:{}。>>>", url, e);
|
return null;
|
||||||
try {
|
}
|
||||||
downLoadImg(url, fileName);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
log.error("重试下载图片失败,url:{}。>>>", url, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return fileName;
|
return fileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void downLoadImg(String url, String fileName) throws Exception {
|
|
||||||
X509TrustManagerUtil.downLoadFromUrlHttps(url, fileName, basePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存车辆群组绑定关系
|
* 保存车辆群组绑定关系
|
||||||
*
|
*
|
||||||
|
|||||||
@ -372,5 +372,100 @@ public class AsyncConfig {
|
|||||||
return executor;
|
return executor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean("getCrossRecords")
|
||||||
|
public ThreadPoolTaskExecutor getCrossRecords() {
|
||||||
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||||
|
/** 核心线程数(默认线程数) */
|
||||||
|
executor.setCorePoolSize(maxPoolSize);
|
||||||
|
/** 最大线程数 */
|
||||||
|
executor.setMaxPoolSize(maxPoolSize);
|
||||||
|
executor.setQueueCapacity(100000);
|
||||||
|
/** 允许线程空闲时间(单位:默认为秒) */
|
||||||
|
executor.setKeepAliveSeconds(60);
|
||||||
|
/** 线程池名前缀 */
|
||||||
|
executor.setThreadNamePrefix("getCrossRecords-");
|
||||||
|
// 线程池对拒绝任务的处理策略
|
||||||
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
// 初始化
|
||||||
|
executor.initialize();
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("getDoorEvents")
|
||||||
|
public ThreadPoolTaskExecutor getDoorEvents() {
|
||||||
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||||
|
/** 核心线程数(默认线程数) */
|
||||||
|
executor.setCorePoolSize(maxPoolSize);
|
||||||
|
/** 最大线程数 */
|
||||||
|
executor.setMaxPoolSize(maxPoolSize);
|
||||||
|
executor.setQueueCapacity(100000);
|
||||||
|
/** 允许线程空闲时间(单位:默认为秒) */
|
||||||
|
executor.setKeepAliveSeconds(60);
|
||||||
|
/** 线程池名前缀 */
|
||||||
|
executor.setThreadNamePrefix("getDoorEvents-");
|
||||||
|
// 线程池对拒绝任务的处理策略
|
||||||
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
// 初始化
|
||||||
|
executor.initialize();
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("saveEventCallbackAttendance")
|
||||||
|
public ThreadPoolTaskExecutor saveEventCallbackAttendance() {
|
||||||
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||||
|
/** 核心线程数(默认线程数) */
|
||||||
|
executor.setCorePoolSize(maxPoolSize);
|
||||||
|
/** 最大线程数 */
|
||||||
|
executor.setMaxPoolSize(maxPoolSize);
|
||||||
|
executor.setQueueCapacity(100000);
|
||||||
|
/** 允许线程空闲时间(单位:默认为秒) */
|
||||||
|
executor.setKeepAliveSeconds(60);
|
||||||
|
/** 线程池名前缀 */
|
||||||
|
executor.setThreadNamePrefix("saveEventCallbackAttendance-");
|
||||||
|
// 线程池对拒绝任务的处理策略
|
||||||
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
// 初始化
|
||||||
|
executor.initialize();
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("saveEventCallbackCarPassRecord")
|
||||||
|
public ThreadPoolTaskExecutor saveEventCallbackCarPassRecord() {
|
||||||
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||||
|
/** 核心线程数(默认线程数) */
|
||||||
|
executor.setCorePoolSize(maxPoolSize);
|
||||||
|
/** 最大线程数 */
|
||||||
|
executor.setMaxPoolSize(maxPoolSize);
|
||||||
|
executor.setQueueCapacity(100000);
|
||||||
|
/** 允许线程空闲时间(单位:默认为秒) */
|
||||||
|
executor.setKeepAliveSeconds(60);
|
||||||
|
/** 线程池名前缀 */
|
||||||
|
executor.setThreadNamePrefix("saveEventCallbackCarPassRecord-");
|
||||||
|
// 线程池对拒绝任务的处理策略
|
||||||
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
// 初始化
|
||||||
|
executor.initialize();
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("saveEventCallbackAiAsync")
|
||||||
|
public ThreadPoolTaskExecutor saveEventCallbackAiAsync() {
|
||||||
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||||
|
/** 核心线程数(默认线程数) */
|
||||||
|
executor.setCorePoolSize(maxPoolSize);
|
||||||
|
/** 最大线程数 */
|
||||||
|
executor.setMaxPoolSize(maxPoolSize);
|
||||||
|
executor.setQueueCapacity(100000);
|
||||||
|
/** 允许线程空闲时间(单位:默认为秒) */
|
||||||
|
executor.setKeepAliveSeconds(60);
|
||||||
|
/** 线程池名前缀 */
|
||||||
|
executor.setThreadNamePrefix("saveEventCallbackAiAsync-");
|
||||||
|
// 线程池对拒绝任务的处理策略
|
||||||
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
// 初始化
|
||||||
|
executor.initialize();
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -119,6 +119,7 @@ public class SafetyHatWSClient {
|
|||||||
List<SafetyHatDev> devList = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectList(new LambdaQueryWrapper<SafetyHatDev>()
|
List<SafetyHatDev> devList = SpringContextUtils.getBean(SafetyHatDevMapper.class).selectList(new LambdaQueryWrapper<SafetyHatDev>()
|
||||||
.eq(SafetyHatDev::getProjectSn, project.getProjectSn())
|
.eq(SafetyHatDev::getProjectSn, project.getProjectSn())
|
||||||
.notIn(SafetyHatDev::getDevSn, devsns)
|
.notIn(SafetyHatDev::getDevSn, devsns)
|
||||||
|
.eq(SafetyHatDev::getOnline, 1)
|
||||||
);
|
);
|
||||||
if (CollUtil.isNotEmpty(devList)) {
|
if (CollUtil.isNotEmpty(devList)) {
|
||||||
for (SafetyHatDev dev : devList) {
|
for (SafetyHatDev dev : devList) {
|
||||||
|
|||||||
@ -96,12 +96,15 @@ public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> impl
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addCarInfo(CarInfo carInfo) {
|
public void addCarInfo(CarInfo carInfo) {
|
||||||
QueryWrapper<CarInfo> queryWrapper = new QueryWrapper<>();
|
if (Objects.equals(carInfo.getCarModuleType(), 1)) {
|
||||||
queryWrapper.lambda().eq(CarInfo::getProjectSn, carInfo.getProjectSn())
|
QueryWrapper<CarInfo> queryWrapper = new QueryWrapper<>();
|
||||||
.eq(CarInfo::getCarNumber, carInfo.getCarNumber());
|
queryWrapper.lambda().eq(CarInfo::getProjectSn, carInfo.getProjectSn())
|
||||||
int count = carInfoMapper.selectCount(queryWrapper);
|
.eq(CarInfo::getCarNumber, carInfo.getCarNumber())
|
||||||
if (count > 0) {
|
.eq(CarInfo::getCarModuleType, 1);
|
||||||
throw new OpenAlertException(MessageUtil.get("carNumberExistErr"));
|
int count = carInfoMapper.selectCount(queryWrapper);
|
||||||
|
if (count > 0) {
|
||||||
|
throw new OpenAlertException(MessageUtil.get("carNumberExistErr"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
carInfoMapper.insert(carInfo);
|
carInfoMapper.insert(carInfo);
|
||||||
|
|
||||||
@ -111,13 +114,16 @@ public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> impl
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void editCarInfo(CarInfo carInfo) {
|
public void editCarInfo(CarInfo carInfo) {
|
||||||
QueryWrapper<CarInfo> queryWrapper = new QueryWrapper<>();
|
if (Objects.equals(carInfo.getCarModuleType(), 1)) {
|
||||||
queryWrapper.lambda().eq(CarInfo::getProjectSn, carInfo.getProjectSn())
|
QueryWrapper<CarInfo> queryWrapper = new QueryWrapper<>();
|
||||||
.eq(CarInfo::getCarNumber, carInfo.getCarNumber())
|
queryWrapper.lambda().eq(CarInfo::getProjectSn, carInfo.getProjectSn())
|
||||||
.ne(CarInfo::getId, carInfo.getId());
|
.eq(CarInfo::getCarNumber, carInfo.getCarNumber())
|
||||||
int count = carInfoMapper.selectCount(queryWrapper);
|
.ne(CarInfo::getId, carInfo.getId())
|
||||||
if (count > 0) {
|
.eq(CarInfo::getCarModuleType, 1);
|
||||||
throw new OpenAlertException(MessageUtil.get("carNumberExistErr"));
|
int count = carInfoMapper.selectCount(queryWrapper);
|
||||||
|
if (count > 0) {
|
||||||
|
throw new OpenAlertException(MessageUtil.get("carNumberExistErr"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
CarInfo old = carInfoMapper.selectById(carInfo.getId());
|
CarInfo old = carInfoMapper.selectById(carInfo.getId());
|
||||||
carInfoMapper.updateById(carInfo);
|
carInfoMapper.updateById(carInfo);
|
||||||
|
|||||||
@ -10,10 +10,23 @@ import java.security.cert.CertificateException;
|
|||||||
import java.security.cert.X509Certificate;
|
import java.security.cert.X509Certificate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理https的图片
|
* 处理https/http的图片
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class X509TrustManagerUtil implements X509TrustManager {
|
public class X509TrustManagerUtil implements X509TrustManager {
|
||||||
|
/**
|
||||||
|
* 从网络的url图片保存在本地,包含http和https的图片下载
|
||||||
|
*/
|
||||||
|
public static void downLoadFromUrl(String urlStr, String fileName,
|
||||||
|
String savePath) throws Exception {
|
||||||
|
URL url = new URL(urlStr);
|
||||||
|
if (url.openConnection() instanceof HttpsURLConnection) {
|
||||||
|
downLoadFromUrlHttps(urlStr, fileName, savePath);
|
||||||
|
} else {
|
||||||
|
downLoadFromUrlHttp(urlStr, fileName, savePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从网络的url图片保存在本地
|
* 从网络的url图片保存在本地
|
||||||
*
|
*
|
||||||
@ -52,24 +65,29 @@ public class X509TrustManagerUtil implements X509TrustManager {
|
|||||||
conn.setSSLSocketFactory(ssf);
|
conn.setSSLSocketFactory(ssf);
|
||||||
conn.connect();
|
conn.connect();
|
||||||
|
|
||||||
|
|
||||||
// 得到输入流
|
// 得到输入流
|
||||||
InputStream inputStream = conn.getInputStream();
|
FileOutputStream fos = null;
|
||||||
byte[] getData = readInputStream(inputStream);
|
InputStream inputStream = null;
|
||||||
// 文件保存位置
|
try {
|
||||||
File saveDir = new File(savePath);
|
inputStream = conn.getInputStream();
|
||||||
if (!saveDir.exists()) {
|
byte[] getData = readInputStream(inputStream);
|
||||||
saveDir.mkdirs();
|
// 文件保存位置
|
||||||
}
|
File saveDir = new File(savePath);
|
||||||
//输出流
|
if (!saveDir.exists()) {
|
||||||
File file = new File(saveDir + File.separator + fileName);
|
saveDir.mkdirs();
|
||||||
FileOutputStream fos = new FileOutputStream(file);
|
}
|
||||||
fos.write(getData);
|
//输出流
|
||||||
if (fos != null) {
|
File file = new File(saveDir + File.separator + fileName);
|
||||||
fos.close();
|
fos = new FileOutputStream(file);
|
||||||
}
|
fos.write(getData);
|
||||||
if (inputStream != null) {
|
|
||||||
inputStream.close();
|
} finally {
|
||||||
|
if (fos != null) {
|
||||||
|
fos.close();
|
||||||
|
}
|
||||||
|
if (inputStream != null) {
|
||||||
|
inputStream.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,21 +151,16 @@ public class X509TrustManagerUtil implements X509TrustManager {
|
|||||||
return bos.toByteArray();
|
return bos.toByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
/***
|
String name = "C:/Users/solexit06/Desktop/test/";
|
||||||
* 校验https网址是否安全
|
String urls = "https://116.205.128.251:6113/pic?7db681653a5do-5el*31-25976b8-98c2cabbf**b11===sp**812=9t0470280244=7l0*4010=6ob*521e-7pi114o=2dcb2=15a&AccessKeyId=FOZAuZC0Dc84QjvL&Expires=1709893202&Signature=lJnNS138ZVoPwOar6T4QROyg590=";
|
||||||
*
|
try {
|
||||||
* @author solexit06
|
downLoadFromUrlHttps(urls, "1.png", name);
|
||||||
*
|
} catch (Exception e) {
|
||||||
*/
|
log.error("error:", e);
|
||||||
public class TrustAnyHostnameVerifier implements HostnameVerifier {
|
|
||||||
public boolean verify(String hostname, SSLSession session) {
|
|
||||||
// 直接返回true:默认所有https请求都是安全的
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 里面的方法都是空的,当方法为空是默认为所有的链接都为安全,也就是所有的链接都能够访问到 当然这样有一定的安全风险,可以根据实际需要写入内容
|
* 里面的方法都是空的,当方法为空是默认为所有的链接都为安全,也就是所有的链接都能够访问到 当然这样有一定的安全风险,可以根据实际需要写入内容
|
||||||
*/
|
*/
|
||||||
@ -165,13 +178,16 @@ public class X509TrustManagerUtil implements X509TrustManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
/***
|
||||||
String name = "C:/Users/solexit06/Desktop/test/";
|
* 校验https网址是否安全
|
||||||
String urls = "https://116.205.128.251:6113/pic?7db681653a5do-5el*31-25976b8-98c2cabbf**b11===sp**812=9t0470280244=7l0*4010=6ob*521e-7pi114o=2dcb2=15a&AccessKeyId=FOZAuZC0Dc84QjvL&Expires=1709893202&Signature=lJnNS138ZVoPwOar6T4QROyg590=";
|
*
|
||||||
try {
|
* @author solexit06
|
||||||
downLoadFromUrlHttps(urls, "1.png", name);
|
*
|
||||||
} catch (Exception e) {
|
*/
|
||||||
log.error("error:", e);
|
public class TrustAnyHostnameVerifier implements HostnameVerifier {
|
||||||
|
public boolean verify(String hostname, SSLSession session) {
|
||||||
|
// 直接返回true:默认所有https请求都是安全的
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user