package com.casic.service.impl; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.dao.GasDataRecvMapper; import com.casic.dao.NbAlarmConfigMapper; import com.casic.dao.NbConfigMapper; import com.casic.dao.NbDeviceMapper; import com.casic.entity.LucencyGasData; import com.casic.entity.NbDevice; import com.casic.model.DataGasConfigParam; import com.casic.model.ResponseData; import com.casic.service.GasDataRecvService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.util.*; @Slf4j @AllArgsConstructor @Service public class GasDataRecvServiceImpl extends ServiceImpl<GasDataRecvMapper, LucencyGasData> implements GasDataRecvService { private final NbDeviceMapper nbDeviceMapper; private final AepCommandSend aepCommandSend; private final NbConfigMapper nbConfigMapper; private final NbAlarmConfigMapper nbAlarmConfigMapper; @Override public Object saveRev(Map<String, Object> recvDataMap) { ResponseData responseData = new ResponseData(); try { Map<String, String> contentMap = (Map) recvDataMap.get("payload"); if (contentMap.containsKey("status")) { nbDeviceProvider(recvDataMap, contentMap); } else if (contentMap.containsKey("update")) { configStatusDataProvider(recvDataMap, String.valueOf(contentMap.get("update"))); } else if (contentMap.containsKey("time")) { realTimeGasDataProvider(recvDataMap, contentMap); } else if (contentMap.containsKey("history")) { historyGasDataProvider(recvDataMap, contentMap); } responseData.setCode(200); responseData.setMessage("保存成功"); } catch (Exception dex) { log.error("主题:哈尔滨燃气设备存储异常,异常信息:{}", dex.getMessage()); responseData.setCode(500); responseData.setMessage("保存异常"); } return responseData; } private Boolean nbDeviceProvider(Map<String, Object> recvDataMap, Map<String, String> contentMap) { nbDeviceMapper.deleteDeviceByDeviceId(String.valueOf(recvDataMap.get("deviceId"))); NbDevice nbDevice = NbDevice.builder() .logtime(new Date()) .productId(String.valueOf(recvDataMap.get("productId"))) .devcode(String.valueOf(contentMap.get("devid"))) .iccid(String.valueOf(contentMap.get("iccid"))) .status(String.valueOf(contentMap.get("status"))) .deviceId(String.valueOf(recvDataMap.get("deviceId"))) .valid(1) .imei(String.valueOf(contentMap.get("imei"))).build(); nbDeviceMapper.insert(nbDevice); if (!StringUtils.isEmpty(nbDevice.getImei()) && !StringUtils.isEmpty(nbDevice.getDevcode())) { this.baseMapper.updateData(nbDevice.getImei(), nbDevice.getDevcode()); } return true; } private Boolean realTimeGasDataProvider(Map<String, Object> recvDataMap, Map<String, String> contentMap) throws Exception { String imei = String.valueOf(recvDataMap.get("IMEI")); String deviceId = String.valueOf(recvDataMap.get("deviceId")); String productId = String.valueOf(recvDataMap.get("productId")); fisrtSaveDeviceAndSend(imei, productId, deviceId); String devcode = nbDeviceMapper.getDevcodeByDeviceId(deviceId); LucencyGasData lucencyGasBuilder = LucencyGasData.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())) .logtime(new Date()) .dataValue(String.valueOf(contentMap.get("ch4"))) .cell(Double.valueOf(contentMap.containsKey("ba") ? String.valueOf(contentMap.get("ba")) : "0")) .chha(String.valueOf(contentMap.get("chha"))) .chhha(String.valueOf(contentMap.get("chhha"))) .signals(String.valueOf(contentMap.get("si"))) .devcode(StringUtils.isEmpty(devcode) ? "" : devcode) .build(); this.baseMapper.insert(lucencyGasBuilder); 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")); String devcode = nbDeviceMapper.getDevcodeByDeviceId(String.valueOf(recvDataMap.get("deviceId"))); String tenantId = String.valueOf(recvDataMap.get("tenantId")); String deviceId = String.valueOf(recvDataMap.get("deviceId")); String imei = String.valueOf(recvDataMap.get("IMEI")); for (Map<String, String> historyData : historyDataList) { this.baseMapper.addData(devcode, tenantId, deviceId, imei, new Date(historyData.containsKey("time") ? Long.valueOf(String.valueOf(historyData.get("time"))) : System.currentTimeMillis()), String.valueOf(historyData.get("ch4")), new Date()); } return true; } private Boolean fisrtSaveDeviceAndSend(String imei, String productId, String deviceId) throws Exception { String id = nbDeviceMapper.isDeviceId(deviceId); if (StringUtils.isEmpty(id)) { NbDevice nbDevice = NbDevice.builder() .logtime(new Date()) .deviceId(deviceId) .productId(productId) .imei(imei).build(); nbDeviceMapper.insert(nbDevice); DataGasConfigParam dataGasConfigParam = new DataGasConfigParam(); dataGasConfigParam.setOperator("casic"); dataGasConfigParam.setProductId(productId); dataGasConfigParam.setDeviceId(deviceId); List<DataGasConfigParam> dataGasConfigList = new ArrayList<>(); dataGasConfigList.add(dataGasConfigParam); aepCommandSend.sendStatusNb(dataGasConfigList); return false; } return true; } private void configStatusDataProvider(Map<String, Object> recvDataMap, String status) { String deviceId = String.valueOf(recvDataMap.get("deviceId")); String recentConf = nbDeviceMapper.getRecentByDevciceId(deviceId); String configMsg = status.equals("1") ? "成功下发" : "下发失败(参数不在有效范围内)"; if (recentConf.equals("1")) { nbConfigMapper.configStatusData(configMsg, deviceId); } else { nbAlarmConfigMapper.configStatusData(configMsg, deviceId); } } }