package com.sandu.ximon.admin.manager.iot.amqp.processor;
|
|
import com.alibaba.fastjson.JSON;
|
import com.sandu.common.util.SpringContextHolder;
|
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A7PlcErrorCodeReportInnerFrame;
|
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A7PlcHeartbeatReportInnerFrame;
|
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A7PlcManualLightSwitchReportInnerFrame;
|
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A7PlcTimeSyncReportInnerFrame;
|
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
|
import com.sandu.ximon.admin.manager.iot.rrpc.enums.A7PlcReportEnum;
|
import com.sandu.ximon.admin.service.*;
|
import com.sandu.ximon.dao.domain.Plc;
|
import lombok.extern.slf4j.Slf4j;
|
|
/**
|
* @author van
|
* PLC数据上报处理
|
*/
|
@Slf4j
|
public class PlcDataProcessor implements IMessageProcessor {
|
|
private PlcDataProcessor() {
|
}
|
|
public static PlcDataProcessor getInstance() {
|
return PlcDataProcessorHolder.INSTANCE;
|
}
|
|
private static class PlcDataProcessorHolder {
|
|
private static final PlcDataProcessor INSTANCE = new PlcDataProcessor();
|
}
|
|
@Override
|
public void process(String productKey, String deviceName, CommonFrame frame) {
|
String functionCode = frame.getPayload().substring(2, 4);
|
if (A7PlcReportEnum.HeartBeat_Data.getCode().equals(functionCode)) {
|
log.error("心跳相应");
|
A7PlcHeartbeatReportInnerFrame heartbeatReportInnerFrame = new A7PlcHeartbeatReportInnerFrame().transformFrame(frame.getPayload());
|
|
// if ("3930364d485010ff803affff".equals(deviceName)) {
|
// System.out.println("心跳包: " + JSON.toJSONString(heartbeatReportInnerFrame));
|
// System.out.println("crc32校验结果:"+heartbeatReportInnerFrame.isValidate());
|
// }
|
if (heartbeatReportInnerFrame.isValidate()) {
|
SpringContextHolder.getBean(PlcReportDataService.class).saveReportData(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage());
|
//心跳包上报不保存硬件设备信息
|
// SpringContextHolder.getBean(LightService.class).saveLight(deviceName, heartbeatReportInnerFrame.getHeartBeatDataPackage());
|
}
|
|
} else if (A7PlcReportEnum.Time_Synchronized.getCode().equals(functionCode)) {
|
log.error("请求时间同步");
|
A7PlcTimeSyncReportInnerFrame syncRespInnerFrame = new A7PlcTimeSyncReportInnerFrame().transformFrame(frame.getPayload());
|
if (syncRespInnerFrame.isValidate()) {
|
SpringContextHolder.getBean(PlcService.class).timeSynchronizationInitiative(deviceName, syncRespInnerFrame.getDestinationAddress());
|
}
|
|
} else if (A7PlcReportEnum.Error_Code.getCode().equals(functionCode)) {
|
log.error("故障码上报");
|
A7PlcErrorCodeReportInnerFrame codeRespInnerFrame = new A7PlcErrorCodeReportInnerFrame().transformFrame(frame.getPayload());
|
log.error(codeRespInnerFrame.isValidate() + "是否通过校验");
|
log.error(codeRespInnerFrame.getErrorCode() + "故障码");
|
if (codeRespInnerFrame.isValidate()) {
|
SpringContextHolder.getBean(PlcReportErrorService.class).saveReportError(deviceName, codeRespInnerFrame);
|
}
|
// 0000 表示没有故障,发送清除故障指令
|
if (codeRespInnerFrame.getErrorCode() == 0) {
|
System.out.println("清除故障操作!");
|
SpringContextHolder.getBean(PlcReportErrorService.class).saveReportError(deviceName, codeRespInnerFrame);
|
SpringContextHolder.getBean(LightReportErrorService.class).cleanErrorCode(deviceName, codeRespInnerFrame.getDestinationAddress());
|
}
|
} else if (A7PlcReportEnum.Manual_LightSwitch_Request.getCode().equals(functionCode)){
|
A7PlcManualLightSwitchReportInnerFrame syncRespInnerFrame = new A7PlcManualLightSwitchReportInnerFrame().transformFrame(frame.getPayload());
|
if (syncRespInnerFrame.isValidate()) {
|
Plc plc = SpringContextHolder.getBean(PlcService.class).getPlc(deviceName);
|
String responseStatus = syncRespInnerFrame.getResponseStatus();
|
if (plc != null) {
|
// 手动开关动作上报。0x00-全关,0x64-全开
|
if (responseStatus.equals("00")){
|
plc.setPlcLight1(0);
|
plc.setPlcLight2(0);
|
plc.setPlcLight3(0);
|
} else if (responseStatus.equals("64")) {
|
plc.setPlcLight1(1);
|
plc.setPlcLight2(1);
|
plc.setPlcLight3(1);
|
}
|
SpringContextHolder.getBean(PlcService.class).updateById(plc);
|
}
|
}
|
}
|
}
|
}
|