Newer
Older
smartwell_demos / src / main / java / com / casic / service / impl / ThirdDataServiceImpl.java
chaizhuang on 25 Nov 2022 4 KB 增加海康验证
package com.casic.service.impl;

import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.casic.dao.DataPressureMapper;
import com.casic.model.DataPressure;
import com.casic.model.PressureDataParam;
import com.casic.model.ResponseData;
import com.casic.service.ThirdDataService;
import com.casic.util.CacheUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

@Service
@Slf4j
public class ThirdDataServiceImpl extends ServiceImpl<DataPressureMapper, DataPressure> implements ThirdDataService {

    private final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);

    public Object getDeviceRecentData(PressureDataParam pressureDataParam) {
        ResponseData responseData = new ResponseData();
        try {
            batchSave(pressureDataParam);
            responseData.setMessage(ResponseData.DEFAULT_SUCCESS_MESSAGE);
            responseData.setCode(ResponseData.DEFAULT_SUCCESS_CODE);
        } catch (DataAccessException dae) {
            log.error("设备最近数据查询异常,设备类型{},异常信息{}", dae.getMessage());
            responseData.setMessage(ResponseData.DEFAULT_ERROR_MESSAGE);
            responseData.setCode(ResponseData.DEFAULT_ERROR_CODE);
        }
        return responseData;
    }

    private void batchSave(PressureDataParam pressureDataParam) {
        String pressureDataJson = pressureDataParam.getRawData();
        log.info("----" + pressureDataJson);
        Map<String, Object> pressureDataMap = JSON.parseObject(pressureDataJson, HashMap.class);
        Date uptime = null;
        try {
            uptime = dateFormat.parse(String.valueOf(pressureDataMap.get("times")));
        } catch (Exception e) {
            log.error("主题,采集时间解析异常,异常信息{}", e.getMessage());
        }
        List<Map<String, String>> pressureDataList = (List<Map<String, String>>) pressureDataMap.get("sensorDatas");
        DataPressure dataPressure = initPrssureData(pressureDataList, uptime);
        if (dataPressure == null) {
            return;
        }
        checkAlarm(dataPressure);
    }

    private DataPressure initPrssureData(List<Map<String, String>> pressureDataList, Date uptime) {
        DataPressure dataPressure = new DataPressure();
        String devcode = pressureDataList.get(pressureDataList.size() - 1).get("str");
        Map<String, String> pressureDataMap = pressureDataList.stream().collect(
                Collectors.toMap(e -> String.valueOf(e.get("flag")), e -> String.valueOf(e.get("value")))
        );
//        if (CacheUtil.serialBuf.get(devcode)!=null&&CacheUtil.serialBuf.get(devcode).equals(pressureDataMap.get("F"))) {
//            return null;
//        }
        String wellCode = this.baseMapper.getWellCode(devcode);
        dataPressure.setWellCode(wellCode);
        dataPressure.setDevcode(devcode);
        dataPressure.setPci(pressureDataMap.get("Q"));
        dataPressure.setCell(Float.valueOf(pressureDataMap.get("V")));
        dataPressure.setTemperature(pressureDataMap.get("T"));
        dataPressure.setPress(pressureDataMap.get("F"));
        dataPressure.setUptime(dateFormat.format(uptime));
        dataPressure.setLogtime(dateFormat.format(new Date()));
        this.baseMapper.insert(dataPressure);
//        CacheUtil.serialBuf.put(devcode, pressureDataMap.get("F"));
        return dataPressure;
    }

    private void checkAlarm(DataPressure dataPressure) {
        final Float ruleValue = this.baseMapper.getRuleValue("24");
        if (ruleValue == null) return;
        if (!StringUtils.isEmpty(dataPressure.getPress()) && !dataPressure.getPress().equals("null")) {
            if (Float.valueOf(dataPressure.getPress()) > ruleValue) {
                this.baseMapper.saveRecords(dataPressure.getPress(), new Date());
            }
        }
    }

}