Просмотр исходного кода

新增 气象设备增加 单次雨量 统计功能

zhaiyifei 10 месяцев назад
Родитель
Сommit
1ca1be3df0

+ 47 - 13
src/main/java/com/yunfeiyun/agmp/iots/device/serviceImp/YfQxzDeviceImpl.java

@@ -3,18 +3,19 @@ package com.yunfeiyun.agmp.iots.device.serviceImp;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.common.service.LocationService;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.cmd.CmdDef;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.constant.mqtt.IotMqttConstant;
-import com.yunfeiyun.agmp.iot.common.domain.IotBaseEntity;
 import com.yunfeiyun.agmp.iot.common.domain.IotBzydata;
 import com.yunfeiyun.agmp.iot.common.domain.IotDevice;
 import com.yunfeiyun.agmp.iot.common.domain.IotYfqxzdata;
+import com.yunfeiyun.agmp.iot.common.enums.EnumCommonDataFactor;
+import com.yunfeiyun.agmp.iot.common.enums.YfqxzEnumFactor;
 import com.yunfeiyun.agmp.iot.common.model.cmd.CmdModel;
-import com.yunfeiyun.agmp.common.service.LocationService;
 import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iots.core.manager.MqttManager;
 import com.yunfeiyun.agmp.iots.device.common.DeviceAbstractImpl;
@@ -23,7 +24,10 @@ import com.yunfeiyun.agmp.iots.device.domain.yfqxz.YfQxzLedMsg;
 import com.yunfeiyun.agmp.iots.device.domain.yfqxz.YfQxzMsg;
 import com.yunfeiyun.agmp.iots.device.domain.yfqxz.YfQxzReqMsg;
 import com.yunfeiyun.agmp.iots.device.service.IYfQxzDevice;
-import com.yunfeiyun.agmp.iots.service.*;
+import com.yunfeiyun.agmp.iots.service.IIotCmdlogService;
+import com.yunfeiyun.agmp.iots.service.IIotDeviceService;
+import com.yunfeiyun.agmp.iots.service.IIotDeviceconfigService;
+import com.yunfeiyun.agmp.iots.service.IIotDevicelasteddataService;
 import com.yunfeiyun.agmp.iots.service.impl.IotDeviceAddressService;
 import com.yunfeiyun.agmp.iots.service.impl.WarnService;
 import lombok.extern.slf4j.Slf4j;
@@ -31,8 +35,8 @@ import org.apache.http.util.TextUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.Date;
-import java.util.Objects;
+import java.text.DecimalFormat;
+import java.util.*;
 
 
 /**
@@ -59,7 +63,7 @@ public class YfQxzDeviceImpl extends DeviceAbstractImpl implements IYfQxzDevice
     private IIotDevicelasteddataService iIotDevicelasteddataService;
 
     @Autowired
-    private MongoService<IotBaseEntity> mongoService;
+    private MongoService mongoService;
 
     @Autowired
     private LocationService locationService;
@@ -272,27 +276,57 @@ public class YfQxzDeviceImpl extends DeviceAbstractImpl implements IYfQxzDevice
         }*/
 
         // 更新设备数据信息到数据库 mongodb
-        String cId = iotDeviceOld.getTid();
-
+        List<IotYfqxzdata> iotYfqxzdataList = new ArrayList<>();
         for (Object item: jarrData) {
             JSONObject jobj = (JSONObject) item;
+            String eNum = jobj.getString("eNum");
+            String eKey = jobj.getString("eKey");
+            String eValue = jobj.getString("eValue");
             IotYfqxzdata iotYfqxzdata = new IotYfqxzdata();
-            iotYfqxzdata.setCId(cId);
+            iotYfqxzdata.setCId(iotDeviceOld.getTid());
             iotYfqxzdata.setDevBid(iotDeviceOld.getDevBid());
-            iotYfqxzdata.setENum(jobj.getString("eNum"));
+            iotYfqxzdata.setENum(eNum);
             iotYfqxzdata.setEName(jobj.getString("eName"));
-            iotYfqxzdata.setEKey(jobj.getString("eKey"));
-            iotYfqxzdata.setEValue(jobj.getString("eValue"));
+            iotYfqxzdata.setEKey(eKey);
+            iotYfqxzdata.setEValue(eValue);
 
             iotYfqxzdata.setTime(reportDt);
 
-            mongoService.saveOne(iotYfqxzdata);
+            iotYfqxzdataList.add(iotYfqxzdata);
+
+            // 如果有累计雨量,则计算单次雨量
+            if(YfqxzEnumFactor.TYPE14.getCode().equals(eNum.replace("e",""))){
+                Date selectTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.dateNow());
+                Map<String, Object> map = new HashMap<>();
+                map.put("devBid",iotDeviceOld.getDevBid());
+                map.put("lte_time", selectTime);
+                map.put("eNum", eNum);
+                IotYfqxzdata resultData = (IotYfqxzdata) mongoService.findOne(IotYfqxzdata.class, map, "time", "desc");
+                double ev = Double.parseDouble(eValue);
+                if(resultData != null){
+                    String oldEValue = resultData.getEValue();
+                    ev =  ev - Double.parseDouble(oldEValue);
+                }
+                IotYfqxzdata iotYfqxzdata2 = new IotYfqxzdata();
+                iotYfqxzdata2.setCId(iotDeviceOld.getTid());
+                iotYfqxzdata2.setDevBid(iotDeviceOld.getDevBid());
+                iotYfqxzdata2.setENum(eNum);
+                iotYfqxzdata2.setEName(EnumCommonDataFactor.TYPE_104.getCode());
+                iotYfqxzdata2.setEKey("e" + YfqxzEnumFactor.TYPE4.getCode());
+                iotYfqxzdata2.setEValue(new DecimalFormat("0.00").format(ev));
+                iotYfqxzdata2.setTime(reportDt);
+
+                iotYfqxzdataList.add(iotYfqxzdata2);
+            }
 
             //把“上报时间”放里面
             jobj.put("time",DateUtils.parseDateToStr("yyyy-MM-dd'T'HH:mm:ss.SSSX",reportDt));
             jobj.put("devBid",iotYfqxzdata.getDevBid());
             jobj.put("cId",iotYfqxzdata.getCId());
         }
+        if(!iotYfqxzdataList.isEmpty()){
+            mongoService.insertList(IotYfqxzdata.class, iotYfqxzdataList);
+        }
         iIotDevicelasteddataService.updateDeviceLastedData(iotDeviceOld,jarrData.toString(), devUpdateddate);
 
         //预警