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.getTemperature()) && !dataPressure.getTemperature().equals("null")) { if (Float.valueOf(dataPressure.getTemperature()) > ruleValue) { this.baseMapper.saveRecords(dataPressure.getTemperature(), new Date()); } } } }