Newer
Older
rain_receiver / src / main / java / com / casic / resolver / RainFallDataResolver.java
chaizhuang on 10 Jul 2023 3 KB 数据解析
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)) {
            //去掉补位
            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()
                    .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);
    }

}