Browse Source

设备数据写入到MongoDB PengDi@2021/1/7

pengdi@zoniot.com 4 years ago
parent
commit
3b1ddf5b17

+ 49 - 2
smart-city-intf/src/main/java/com/zcxk/smartcity/data/access/service/impl/DeviceDataServiceV2Impl.java

@@ -6,11 +6,13 @@ import com.zcxk.smartcity.data.access.common.CommonConstant;
 import com.zcxk.smartcity.data.access.common.RedisUtil;
 import com.zcxk.smartcity.data.access.dao.*;
 import com.zcxk.smartcity.data.access.dto.ConfigDataDto;
+import com.zcxk.smartcity.data.access.dto.DeviceData;
 import com.zcxk.smartcity.data.access.dto.UdipUnitDataDTO;
 import com.zcxk.smartcity.data.access.dto.ValveControlDataDto;
 import com.zcxk.smartcity.data.access.entity.*;
 import com.zcxk.smartcity.data.access.protocol.model.MeasuringData;
 import com.zcxk.smartcity.data.access.rabbitmq.WaterMeterDataSender;
+import com.zcxk.smartcity.data.access.repository.DeviceDataRepository;
 import com.zcxk.smartcity.data.access.service.ConfigService;
 import com.zcxk.smartcity.data.access.service.DeviceDataServiceV2;
 import com.zcxk.smartcity.data.access.util.JacksonUtil;
@@ -31,6 +33,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.util.*;
 
 import static com.google.common.collect.Lists.newArrayList;
@@ -85,6 +88,9 @@ public class DeviceDataServiceV2Impl implements DeviceDataServiceV2 {
     @Resource
     WaterMeterDataSender waterMeterDataSender;
 
+    @Autowired
+    DeviceDataRepository deviceDataRepository ;
+
     @Override
     public int saveDeviceData(Device device, UdipUnitDataDTO unitData) {
         log.info("begin saveDeviceData,device = {} ,data = {}" , JSON.toJSONString(device) ,JSON.toJSONString(unitData));
@@ -144,7 +150,7 @@ public class DeviceDataServiceV2Impl implements DeviceDataServiceV2 {
         return j;
     }
 
-    public int saveDeviceMeasuringDatas(Device device, Map<String, MeasuringData> dataMap, String lastUpateTime, Date receiveTime) {
+    public int saveDeviceMeasuringDatas(Device device, Map<String, MeasuringData> dataMap, String lastUpdateTime, Date receiveTime) {
         log.info("begin saveDeviceMeasuringData  ,device = {} ,data = {} " ,JSON.toJSONString(device) , JSON.toJSONString(dataMap));
         List<DeviceMeasuringPoint> dmps = deviceMeasuringPointMapper.findByDeviceTypeId(device.getDeviceType());
         int i = 0;
@@ -168,13 +174,22 @@ public class DeviceDataServiceV2Impl implements DeviceDataServiceV2 {
                 dd.setMeasuringData(measuringValue);
                 dd.setSiteId(device.getSiteId());
                 dd.setSysId(device.getSysId());
-                dd.setSendDate(Integer.parseInt(lastUpateTime.substring(0, 8)));
+                dd.setSendDate(Integer.parseInt(lastUpdateTime.substring(0, 8)));
                 dd.setSendTime(receiveTime);
                 dd.setMeasuringUnit(dmp.getDataUnit());
                 deviceDataDimMapper.save(dd);
                 i++;
             }
         }
+        // 将数据保存到MongoDB中
+        try{
+            // 构建DeviceData对象
+            DeviceData deviceData = buildDeviceData(device, dataMap, lastUpdateTime);
+            deviceDataRepository.save(deviceData);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error("Device data save mongo failed !",e);
+        }
         // 2,判断设备是否水表,如果是水表则保存读数
         if(device.getIsWater() == 1) {
             try
@@ -247,6 +262,38 @@ public class DeviceDataServiceV2Impl implements DeviceDataServiceV2 {
         return i;
     }
 
+
+    protected DeviceData buildDeviceData(Device device, Map<String, MeasuringData> dataMap, String receiveTime){
+        DeviceData deviceData = new DeviceData();
+        deviceData.setChannelId(device.getSysId());
+        deviceData.setCommunityId(device.getCommunityId());
+        deviceData.setCustomerId(device.getCustomerId());
+        deviceData.setDateCreate(LocalDateTime.now());
+        deviceData.setDeviceId(device.getId());
+        deviceData.setDeviceNo(device.getDeviceNo());
+        deviceData.setDeviceTypeId(device.getDeviceType());
+        deviceData.setId(idWorker.nextId());
+        deviceData.setLocation(device.getLocDesc());
+        deviceData.setManufacturerId(device.getManufacturerId());
+        deviceData.setReceiveDate(Integer.parseInt(receiveTime.substring(0, 8)));
+        deviceData.setReceiveTime(parserDate(receiveTime));
+        deviceData.setSiteId(device.getSiteId());
+        deviceData.setStatus(1);
+        deviceData.setData(getDeviceMeasuringValueMap(dataMap));
+        deviceData.setBuildingId(device.getBuildingId());
+        return deviceData ;
+    }
+
+    protected  Map<String,String> getDeviceMeasuringValueMap(Map<String, MeasuringData> dataMap){
+        Map<String,String> measuringValueMap = new HashMap<>(dataMap.size());
+        Iterator<Map.Entry<String, MeasuringData>> iterator = dataMap.entrySet().iterator();
+        while(iterator.hasNext()){
+            Map.Entry<String, MeasuringData> next = iterator.next();
+            measuringValueMap.put(next.getValue().getMeasuringCode(),next.getValue().getMeasuringVaule());
+        }
+        return measuringValueMap ;
+    }
+
     private boolean matches(Integer customerId) {
         List<ConfigDataDto> configDataList = configService.getConfigData("push_valve_config");
         if (configDataList != null && configDataList.size() > 0) {