package com.casic.service.impl; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.dao.GasPressDataMapper; import com.casic.dao.NbPressMapper; import com.casic.entity.GasPressData; import com.casic.entity.NbDevice; import com.casic.entity.NbPress; import com.casic.model.ResponseData; import com.casic.service.PressDataRecvService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import java.sql.Wrapper; import java.util.Date; import java.util.List; import java.util.Map; import java.util.function.Supplier; @Service @Slf4j @AllArgsConstructor public class PressDataRecvServiceImpl extends ServiceImpl<GasPressDataMapper, GasPressData> implements PressDataRecvService { private final NbPressMapper nbPressMapper; @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); flushNbPressStatus(recvDataMap,gasPressData.getCell()); 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); } flushNbPressStatus(recvDataMap,null); return true; } private void flushNbPressStatus(Map<String, Object> recvDataMap,Double cell){ QueryWrapper<NbPress> nbPressWrapper= new QueryWrapper<NbPress>().eq("device_id",String.valueOf(recvDataMap.get("deviceId"))); List<NbPress> nbPressList=this.nbPressMapper.selectList(nbPressWrapper); if(CollectionUtils.isEmpty(nbPressList)){ NbPress nbPress=new NbPress(); nbPress.setDeviceId(String.valueOf(recvDataMap.get("deviceId"))); nbPress.setImei(String.valueOf(recvDataMap.get("IMEI"))); nbPress.setProductId(String.valueOf(recvDataMap.get("productId"))); nbPress.setTenantId(String.valueOf(recvDataMap.get("tenantId"))); if(!ObjectUtils.isEmpty(cell)){ nbPress.setCell(String.valueOf(cell)); } this.nbPressMapper.insert(nbPress); }else { NbPress nbPress=nbPressList.stream().findFirst().get(); if(ObjectUtils.isEmpty(cell)){ return; }else { nbPress.setCell(String.valueOf(cell)); } this.nbPressMapper.updateById(nbPress); } } }