package com.tievd.jyz.handler.alg.oil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.tievd.cube.modules.system.entity.SysDepart;
|
import com.tievd.jyz.cache.AlgorithmCache;
|
import com.tievd.jyz.cache.DepartCache;
|
import com.tievd.jyz.cache.DeviceCache;
|
import com.tievd.jyz.constants.SystemConstant;
|
import com.tievd.jyz.entity.*;
|
import com.tievd.jyz.handler.alg.AlgHandleInterface;
|
import com.tievd.jyz.mapper.CameraMapper;
|
import com.tievd.jyz.mqtt.command.MqttCommandReceiver;
|
import com.tievd.jyz.mqtt.dto.EventInfoDTO;
|
import com.tievd.jyz.service.IOiloutEventService;
|
import com.tievd.jyz.service.IOiloutRecordService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
|
import java.sql.Timestamp;
|
import java.time.LocalDate;
|
import java.util.Date;
|
|
/**
|
* 卸油算法处理类
|
* @author timi
|
*/
|
@Slf4j
|
@Component
|
public class OilAlgHandler implements AlgHandleInterface {
|
/** 卸油算法标识头 */
|
private final String[] ALG_TAG = new String[]{
|
"X10001", "X10002", "X10003",
|
"X10004", "X10005", "X10006",
|
"X10007", "X10008"};
|
|
private final String lastAlgTag = "X10008";
|
@Override
|
public String[] getAlgTag(){
|
return ALG_TAG;
|
}
|
@Autowired
|
private IOiloutEventService oiloutEventService;
|
@Autowired
|
private IOiloutRecordService oiloutRecordService;
|
@Autowired
|
private CameraMapper cameraMapper;
|
@Autowired
|
private MqttCommandReceiver mqttCommandReceiver;
|
@Value("${init.sendCommandTopic:/ty/aibox/command/}")
|
private String sendCommandTopic;
|
|
/**
|
* 处理入口
|
* @param eventInfoDTO
|
* @param sn
|
* @param time
|
*/
|
@Override
|
public void handle(EventInfoDTO<JSONObject> eventInfoDTO, String sn,String time) {
|
//当前事件唯一标识
|
String eventCode = eventInfoDTO.getEventCode();
|
//检测算法编码
|
String algCode = eventInfoDTO.getAlgCode();
|
//终端编码
|
String cameraCode = eventInfoDTO.getCameraCode();
|
//车牌
|
String plateNumber = "";
|
|
Device device = DeviceCache.getDeviceBySn(sn);
|
if(ObjectUtil.isNull(device)){
|
log.error("网关设备不存在,sn:{}",sn);
|
return;
|
}
|
SysAlgorithmItem sysAlgorithmItem = AlgorithmCache.getAlgorithmMap(algCode);
|
if(ObjectUtil.isNull(sysAlgorithmItem)){
|
log.error("算法类型不存在,algCode:{}",algCode);
|
return;
|
}
|
SysDepart sysDepart = DepartCache.getDepartByOrgCode(device.getOrgCode());
|
if(ObjectUtil.isNull(sysDepart)){
|
log.error("机构不存在,orgCode:{}",device.getOrgCode());
|
return;
|
}
|
//上传信息中无车牌号,暂时使用第三方的processId作为id传入记录中
|
OiloutRecord oiloutRecord = BeanUtil.copyProperties(eventInfoDTO.getExtend(), OiloutRecord.class);
|
LambdaQueryWrapper<OiloutRecord> wrapper = new LambdaQueryWrapper<>(oiloutRecord).eq(OiloutRecord::getOrgCode, device.getOrgCode()).isNull(OiloutRecord::getEndTime);
|
OiloutRecord recordSelect = oiloutRecordService.getOne(wrapper, false);
|
|
if(ObjectUtil.isNull(recordSelect)){
|
oiloutRecord = oilOutRecordGen(oiloutRecord, plateNumber,System.currentTimeMillis(),cameraCode,device.getId(), device.getName(),sysDepart);
|
oiloutRecordService.save(oiloutRecord);
|
} else {
|
oiloutRecord = recordSelect;
|
}
|
OiloutEvent oiloutEvent = oiloutEventService.getOne(new LambdaQueryWrapper<OiloutEvent>().eq(OiloutEvent::getRecordId,oiloutRecord.getId()).eq(OiloutEvent::getAlgorithmCode,algCode), false);
|
if(ObjectUtil.isNotNull(oiloutEvent)){
|
return;
|
}
|
oiloutEvent = oilOutEventGen( eventCode, sysAlgorithmItem, device, sysDepart, cameraCode, time, SystemConstant.OILOUT_EVETN_TYPE_RIGHT.byteValue());
|
//将扩展信息的图片和是否合规赋值
|
BeanUtil.copyProperties(eventInfoDTO.getExtend(), oiloutEvent);
|
oiloutEvent.setId(null);
|
oiloutEvent.setRecordId(oiloutRecord.getId());
|
oiloutEventService.save(oiloutEvent);
|
//请求图片和短视频
|
// log.info("请求图片和短视频,eventCode:{}",eventCode);
|
// EventResourceDTO eventResourceDTO = new EventResourceDTO(SystemConstant.ALL_SOURCE_TYPE,eventCode,cameraCode);
|
// EventResourceCommand eventResourceCommand = new EventResourceCommand(mqttCommandReceiver,eventResourceDTO,sendCommandTopic,device.getSn());
|
// eventResourceCommand.init();
|
// if(eventResourceCommand.execute() == SystemConstant.DEAL_FAIL){
|
// log.error("事件图片视频指令发送失败");
|
// }
|
//第三方上报顺序不一致,取消阶段检测
|
// if(sysAlgorithmItem.getPhraseSymbol() == (byte)1){
|
// //为阶段标志
|
// if(sysAlgorithmItem.getPhrase() > SystemConstant.OILOUT_EVENT_PHRASE_FRONT){
|
// //为阶段标志,完善之前阶段事件数据
|
// List<SysAlgorithmItem> algorithmItemList = AlgorithmCache.getPhraseAlgorithmMap((byte) (sysAlgorithmItem.getPhrase()-1));
|
// for(SysAlgorithmItem sysAlgorithmItem1:algorithmItemList){
|
// OiloutEvent tmpOiloutEvent = oiloutEventService.getOne(new QueryWrapper<OiloutEvent>().eq("record_id",oiloutRecord.getId()).eq("algorithm_code",sysAlgorithmItem1.getAlgorithmCode()), false);
|
// if(ObjectUtil.isNull(tmpOiloutEvent)){
|
// tmpOiloutEvent = oilOutEventGen(RandomUtil.randomNumbers(10), sysAlgorithmItem1,device, sysDepart, cameraCode, time, SystemConstant.OILOUT_EVETN_TYPE_ERROR.byteValue());
|
// tmpOiloutEvent.setRecordId(oiloutRecord.getId());
|
// tmpOiloutEvent.setImgPath(oiloutEvent.getImgPath());
|
// oiloutEventService.save(tmpOiloutEvent);
|
// //TODO 请求图片视频
|
//
|
// }
|
// }
|
// }
|
// }else{
|
//
|
// }
|
if(lastAlgTag.equals(algCode)){
|
oiloutRecord.setEndTime(new Timestamp(System.currentTimeMillis()));
|
int spandTime = (int) (oiloutRecord.getEndTime().getTime() - oiloutRecord.getStartTime().getTime())/1000/60;
|
oiloutRecord.setSpandTime(spandTime);
|
oiloutRecordService.updateById(oiloutRecord);
|
}
|
}
|
|
|
/**
|
* 卸油记录生成
|
* @param plateNumber
|
* @param startTime
|
* @param cameraCode
|
* @param deviceId
|
* @param sysDepart
|
* @return
|
*/
|
private OiloutRecord oilOutRecordGen(OiloutRecord oiloutRecord, String plateNumber, Long startTime,String cameraCode,Long deviceId, String deviceName,SysDepart sysDepart){
|
oiloutRecord.setCameraCode(cameraCode);
|
oiloutRecord.setDeviceId(deviceId);
|
oiloutRecord.setOrgCode(sysDepart.getOrgCode());
|
oiloutRecord.setOrgName(sysDepart.getDepartName());
|
oiloutRecord.setLicenseNum(plateNumber);
|
oiloutRecord.setStartTime(new Timestamp(startTime));
|
oiloutRecord.setCreateTime(new Date());
|
return oiloutRecord;
|
}
|
|
|
/**
|
* 卸油事件生成
|
* @param eventCode
|
* @param sysAlgorithmItem
|
* @param device
|
* @param sysDepart
|
* @param cameraCode
|
* @param time
|
* @param eventType
|
* @return
|
*/
|
private OiloutEvent oilOutEventGen(String eventCode, SysAlgorithmItem sysAlgorithmItem, Device device,SysDepart sysDepart, String cameraCode, String time,Byte eventType){
|
Camera camera = cameraMapper.selectOne(new QueryWrapper<Camera>().eq("code",cameraCode).eq("device_id",device.getId()));
|
if(ObjectUtil.isNull(camera)){
|
return null;
|
}
|
OiloutEvent oiloutEvent = new OiloutEvent();
|
oiloutEvent.setAlgorithmCode(sysAlgorithmItem.getAlgorithmCode());
|
oiloutEvent.setAlgorithmName(sysAlgorithmItem.getAlgorithmName());
|
oiloutEvent.setEventType(eventType);
|
oiloutEvent.setEventPhrase(sysAlgorithmItem.getPhrase());
|
oiloutEvent.setCameraCode(camera.getCode());
|
oiloutEvent.setCameraName(camera.getName());
|
oiloutEvent.setDeviceId(device.getId());
|
oiloutEvent.setDeviceName(device.getName());
|
oiloutEvent.setOrgCode(sysDepart.getOrgCode());
|
oiloutEvent.setEventDay(LocalDate.now().format(SystemConstant.DATE_DAY_FORMATTER));
|
oiloutEvent.setOrgName(sysDepart.getDepartName());
|
oiloutEvent.setEventTime(new Timestamp(Long.parseLong(time)));
|
oiloutEvent.setImgUid(eventCode);
|
oiloutEvent.setCreateTime(new Timestamp(System.currentTimeMillis()));
|
return oiloutEvent;
|
}
|
}
|