package com.casic.service.impl; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.dao.GasPressDataMapper; import com.casic.entity.GasPressData; import com.casic.model.ResponseData; import com.casic.service.PressDataRecvService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.Map; import java.util.function.Supplier; @Service @Slf4j public class PressDataRecvServiceImpl extends ServiceImpl<GasPressDataMapper, GasPressData> implements PressDataRecvService { @Override public Object saveRev(Map<String, Object> recvDataMap) { ResponseData responseData = new ResponseData(); try { Map<String, String> contentMap = (Map) recvDataMap.get("payload"); this.flagFieldProcessor("time", contentMap, () -> realTimeGasDataProvider(recvDataMap, contentMap)) .flagFieldProcessor("history", contentMap, () -> historyGasDataProvider(recvDataMap, contentMap)); responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { log.error("主题:哈尔滨燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } return responseData; } private PressDataRecvServiceImpl flagFieldProcessor(String flagField, Map<String, String> contentMap, Supplier cse) { if (contentMap.containsKey(flagField)) { cse.get(); } return this; } private Boolean realTimeGasDataProvider(Map<String, Object> recvDataMap, Map<String, String> contentMap) { GasPressData gasPressData = GasPressData.builder() .tenantId(Long.valueOf(String.valueOf(recvDataMap.get("tenantId")))) .deviceId(String.valueOf(recvDataMap.get("deviceId"))) .imei(String.valueOf(recvDataMap.get("IMEI"))) .uptime(new Date(contentMap.containsKey("time") ? Long.valueOf(String.valueOf(contentMap.get("time"))) : System.currentTimeMillis())) .cell(Double.valueOf(contentMap.containsKey("ba") ? String.valueOf(contentMap.get("ba")) : "0")) .signals(String.valueOf(contentMap.get("si"))) .pss(String.valueOf(contentMap.get("pss"))) .ipla(String.valueOf(contentMap.get("ipla"))) .ipl(String.valueOf(contentMap.get("ipl"))) .ipha(String.valueOf(contentMap.get("ipha"))) .iph(String.valueOf(contentMap.get("iph"))) .ip(String.valueOf(contentMap.get("ip"))) .bv(String.valueOf(contentMap.get("bv"))) .build(); this.baseMapper.insert(gasPressData); return true; } private Boolean historyGasDataProvider(Map<String, Object> recvDataMap, Map<String, String> contentMap) { List<Map<String, String>> historyDataList = (List<Map<String, String>>) JSONArray.parse(contentMap.get("history")); for (Map<String, String> historyData : historyDataList) { GasPressData historyGasPressData = GasPressData.builder() .tenantId(Long.valueOf(String.valueOf(recvDataMap.get("tenantId")))) .deviceId(String.valueOf(recvDataMap.get("deviceId"))) .imei(String.valueOf(recvDataMap.get("IMEI"))) .uptime(new Date(historyData.containsKey("time") ? Long.valueOf(String.valueOf(historyData.get("time"))) : System.currentTimeMillis())) .ip(String.valueOf(historyData.get("ip"))) .build(); this.baseMapper.insert(historyGasPressData); } return true; } }