package com.casic.resolver; import com.alibaba.druid.util.StringUtils; import com.casic.config.AlarmLevelConfig; import com.casic.enums.AlarmDatagramFlag; import com.casic.enums.RelayDevcodeMapEnums; import com.casic.mapper.RainFallDataMapper; import com.casic.model.RainFallData; import com.casic.model.RelayStatusDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; @Service @Slf4j public class RainFallDataResolver implements DatagramResolver, AlarmDatagramFlag { @Resource private RainFallDataMapper rainFallDataMapper; @Autowired private AlarmLevelConfig alarmLevelConfig; @Override public RelayStatusDTO datagram(String msg) { if (msg.toLowerCase().contains(rainFallMark)) { log.info("雨量计报文为----" + msg); //去掉补位 String devcode = msg.substring(0, 15); String defaultStrValue = msg.substring(26, 30); long defaultValue = Long.parseLong(defaultStrValue, 16); log.info("设备编号为" + devcode + ",设备数据为" + defaultValue); RainFallData rainFallData = initRainFallData(devcode, defaultValue); rainFallDataMapper.insert(rainFallData); Integer isAlarm = isAlarm(String.valueOf(defaultValue), alarmLevelConfig.getRainfall()); String channelName = RelayDevcodeMapEnums.RELAY_DEVCODE.getRelayDevcodeMap().get(devcode); if (StringUtils.isEmpty(channelName)) { return null; } return RelayStatusDTO.builder() .deviceType("雨量计传感器") .devcode(devcode) .dataValue(String.valueOf(defaultValue)) .channelName(channelName) .lampSwitch(isAlarm) .build(); } return null; } /** * 比较是否报警 报警/正常 1/0 */ protected Integer isAlarm(String realData, String thresholdValue) { if (!StringUtils.isEmpty(realData) && !StringUtils.isEmpty(thresholdValue)) { if (Float.valueOf(realData) >= Float.valueOf(thresholdValue)) { return 1; } } return 0; } private RainFallData initRainFallData(String devcode, Long valueStr) { RainFallData rainFallData = new RainFallData(); rainFallData.setDstid(devcode); rainFallData.setTotalyuliang(String.valueOf(valueStr)); rainFallData.setUptime(new Date()); rainFallData.setLogtime(new Date()); return rainFallData; } // //ByteBuf byteBuf public static void main(String[] main) { pareDeviceHex("8653280684199430AAAA01030200023985"); } private static void pareDeviceHex(String msg) { //去掉补位 String devcode = msg.substring(0, 15); log.info(" devcode : " + devcode); String valueStr = msg.substring(26, 30); long defaultValue = Long.valueOf(valueStr); log.info("设备编号为" + devcode + ",设备数据为" + defaultValue); } }