package com.ld.igds.protocol.snap;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.ld.igds.camera.data.ApiSnapReq;
|
import com.ld.igds.file.CoreFileService;
|
import com.ld.igds.file.dto.FileData;
|
import com.ld.igds.models.SnapSer;
|
import com.ld.igds.protocol.snap.server.Message;
|
import com.ld.igds.protocol.snap.server.SnapServerEngine;
|
import com.ld.igds.util.ContextUtil;
|
import com.ld.igds.view.service.SnapSerService;
|
import com.ld.igds.warn.data.WarnData;
|
import com.ld.igds.constant.WarnLevel;
|
import com.ld.igds.constant.WarnStatus;
|
import com.ld.igds.constant.WarnType;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Date;
|
|
|
/**
|
* 抓拍结果返回
|
*/
|
@Slf4j
|
@Component(AnalysisService.BEAN_ID)
|
public class AnalysisService {
|
|
public static final String BEAN_ID = "snap.analysisService";
|
|
@Autowired
|
private SnapSerService snapSerService;
|
@Autowired
|
private CoreFileService fileService;
|
|
/**
|
* 解析插件返回的信息
|
*
|
* @param message
|
*/
|
public void analysis(Message message) {
|
|
log.info("抓拍插件--->平台--{}", message.toString());
|
|
//添加心跳维持信息
|
SnapUtils.addHeartBeat(message.getIp(), message.getPort());
|
|
//新设备上线
|
if (message.getFunctionId().equals(SnapUtils.FUNC_ID_0)) {
|
|
SnapServerEngine.updateKey(message.getIp(), message.getPort(), message.getSn());
|
|
snapSerService.connectAdd(message.getSn(), message.getIp(), message.getPort());
|
|
log.info("++++抓拍插件登录认证完成++++-SN={}", message.getSn());
|
}
|
|
//抓拍结果返回
|
if (message.getFunctionId().equals(SnapUtils.FUNC_ID_1)) {
|
|
JSONObject jsonContent = JSONObject.parseObject(message.getContent());
|
|
String imgData = (String) jsonContent.get("data");
|
|
if ("error".equals(imgData) || StringUtils.isEmpty(imgData)) {
|
SnapUtils.removeRequest(message.getOrderId().toString());
|
log.error("抓拍插件--->平台--终端抓拍插件抓拍失败.");
|
return;
|
}
|
|
this.analysisImg2Disk(message.getOrderId(), imgData);
|
}
|
|
//事件通知
|
if (message.getFunctionId().equals(SnapUtils.FUNC_ID_2)) {
|
|
|
JSONObject jsonContent = JSONObject.parseObject(message.getContent());
|
|
String action = (String) jsonContent.get("action");
|
|
//断电
|
if (SnapUtils.ACTION_CODE_10.equals(action)) {
|
SnapSer snapSer = snapSerService.getCacheBySn(message.getSn());
|
|
WarnData warnData = new WarnData();
|
warnData.setCompanyId(snapSer.getCompanyId());
|
warnData.setDepotId(snapSer.getDeptId());
|
warnData.setId(ContextUtil.getUUID());
|
warnData.setLevel(WarnLevel.LEVEL_01.getCode());
|
warnData.setName("库区断电警告");
|
warnData.setStatus(WarnStatus.STATUS_10.getCode());
|
warnData.setTime(new Date());
|
warnData.setType(WarnType.TYPE_01.getCode());
|
warnData.setInfo("系统收到库区断电警告通知,已经启动断电抓拍逻辑,请联系库区核对断电原因,时间:" + DateFormatUtils.format(warnData.getTime(), "yyyy-MM-dd HH:mm"));
|
|
|
//TODO 逻辑待调整
|
// coreWarnService.addWarn(warnData);
|
}
|
|
//上电
|
if (SnapUtils.ACTION_CODE_11.equals(action)) {
|
SnapSer snapSer = snapSerService.getCacheBySn(message.getSn());
|
|
WarnData warnData = new WarnData();
|
warnData.setCompanyId(snapSer.getCompanyId());
|
warnData.setDepotId(snapSer.getDeptId());
|
warnData.setId(ContextUtil.getUUID());
|
warnData.setType(WarnType.TYPE_03.getCode());
|
warnData.setName("库区上电通知");
|
warnData.setStatus(WarnStatus.STATUS_40.getCode());
|
warnData.setTime(new Date());
|
warnData.setLevel(WarnLevel.LEVEL_01.getCode());
|
warnData.setInfo("系统收到库区上电通知,时间:" + DateFormatUtils.format(warnData.getTime(), "yyyy-MM-dd HH:mm"));
|
|
//TODO 逻辑待调整
|
//coreWarnService.addWarn(warnData);
|
}
|
|
|
//主动心跳
|
if (SnapUtils.ACTION_CODE_20.equals(action)) {
|
log.debug("------------------抓拍插件心跳维持----------------");
|
}
|
}
|
}
|
|
|
private void analysisImg2Disk(Integer orderId, String imgData) {
|
ApiSnapReq apiSnapReq = SnapUtils.getRequest(orderId.toString());
|
if (null == apiSnapReq) {
|
log.error("----平台解析抓拍插件返回信息,没有获取到原来请求,解析失败.");
|
return;
|
}
|
|
log.debug("----抓拍返回----{}", apiSnapReq);
|
|
|
//如果没有外键信息,表示只保持图片即可,如果有则需要添加附件列表。
|
if (null == apiSnapReq.getBizId()) {
|
fileService.baseImg2Disk(apiSnapReq.getFilePath(), apiSnapReq.getFileName(), imgData);
|
} else {
|
if (null == apiSnapReq.getFilePath()) {
|
apiSnapReq.setFilePath(fileService.getCommonFilePath(new Date()));
|
}
|
if (null == apiSnapReq.getFileName()) {
|
apiSnapReq.setFileName(ContextUtil.getCurTimeMillis() + ".jpg");
|
}
|
|
FileData fileData = new FileData();
|
fileData.setFileId(ContextUtil.getUUID());
|
fileData.setCompanyId(ContextUtil.getDefaultCompanyId());
|
fileData.setBizId(apiSnapReq.getBizId());
|
fileData.setFileName(apiSnapReq.getFileName());
|
fileData.setBizTag(apiSnapReq.getCameraName());
|
fileData.setCreateTime(new Date());
|
fileService.addRecord(fileData);
|
|
//持久保存
|
fileService.baseImg2Disk(apiSnapReq.getFilePath(), apiSnapReq.getFileName(), imgData);
|
|
}
|
|
log.info("平台解析--抓拍插件照片成功--{}", apiSnapReq.getFilePath() + apiSnapReq.getFileName());
|
}
|
|
|
}
|