From 0d42fc07858cdf333822c0e9dd51e4f88475c9f4 Mon Sep 17 00:00:00 2001 From: wyw <373811525@qq.com> Date: Fri, 16 Aug 2024 01:45:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B4=AF=E8=AE=A1=E6=B0=B4?= =?UTF-8?q?=E9=87=8F=E3=80=81=E7=B4=AF=E8=AE=A1=E7=94=B5=E9=87=8F=E3=80=81?= =?UTF-8?q?=E7=AE=B1=E9=97=A8=E7=8A=B6=E6=80=81=E7=9A=84=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gis/impl/GisDeviceServiceImpl.java | 272 +++++++++++++++--- 1 file changed, 225 insertions(+), 47 deletions(-) diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/service/gis/impl/GisDeviceServiceImpl.java b/fastbee-open-api/src/main/java/com/fastbee/data/service/gis/impl/GisDeviceServiceImpl.java index 7c27eab..cfbac92 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/data/service/gis/impl/GisDeviceServiceImpl.java +++ b/fastbee-open-api/src/main/java/com/fastbee/data/service/gis/impl/GisDeviceServiceImpl.java @@ -2,9 +2,11 @@ package com.fastbee.data.service.gis.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.fastbee.common.core.page.TableDataInfo; import com.fastbee.common.model.vo.TreeItemVo; import com.fastbee.common.model.vo.iot.GisDeviceListVo; import com.fastbee.common.utils.DateUtils; @@ -42,7 +44,7 @@ public class GisDeviceServiceImpl implements IGisDeviceService { @Autowired private IDeviceLogService logService; -// @Resource + // @Resource // DeviceInfoCacheService deviceInfoCacheService; @Autowired private IAlertService iAlertService; @@ -52,6 +54,7 @@ public class GisDeviceServiceImpl implements IGisDeviceService { @Autowired private IMaWatereleRecordService watereleRecordService; + public GisDeviceServiceImpl(@Qualifier("deviceMapper") DeviceMapper deviceMapper, @Qualifier("productMapper") ProductMapper productMapper) { this.deviceMapper = deviceMapper; this.productMapper = productMapper; @@ -88,8 +91,8 @@ public class GisDeviceServiceImpl implements IGisDeviceService { devItem.setName(deviceEntity1.getDeviceName()); devItem.setId(deviceEntity1.getDeviceId()); devItem.setStatus(deviceEntity1.getStatus()); - devItem.setLatitude(deviceEntity1.getLatitude() != null ?deviceEntity1.getLatitude().floatValue():null); - devItem.setLongitude(deviceEntity1.getLongitude()!= null ?deviceEntity1.getLongitude().floatValue():null); + devItem.setLatitude(deviceEntity1.getLatitude() != null ? deviceEntity1.getLatitude().floatValue() : null); + devItem.setLongitude(deviceEntity1.getLongitude() != null ? deviceEntity1.getLongitude().floatValue() : null); treeItemVoList.add(devItem); if (deviceEntity1.getStatus() == 3) { onLineCount++; @@ -103,10 +106,12 @@ public class GisDeviceServiceImpl implements IGisDeviceService { deviceListVo.setOnLineCount(onLineCount); return deviceListVo; } + //todo 需要修改安防版和水电双计设备实时数据 @Override public Object getRealTimeDataByDevicerId(Long deviceId) { - HashMap rMap = new HashMap() {}; + HashMap rMap = new HashMap() { + }; if (deviceId == null) { throw new RuntimeException("请上传devicerId"); } @@ -140,10 +145,10 @@ public class GisDeviceServiceImpl implements IGisDeviceService { put("value", 0); put("name", thingsModel.getModelName()); }}; - if(StringUtils.isNotEmpty(thingsModel.getSpecs())){ + if (StringUtils.isNotEmpty(thingsModel.getSpecs())) { String specs = thingsModel.getSpecs(); JSONObject parse = (JSONObject) JSON.parse(specs); - if(parse.containsKey("unit")){ + if (parse.containsKey("unit")) { hashMap.put("unit", parse.get("unit")); } } @@ -151,19 +156,29 @@ public class GisDeviceServiceImpl implements IGisDeviceService { if (hashMap.size() > 1) { List deviceLogs1 = taiyangnengCollect.get(thingsModel.getIdentifier()); if (deviceLogs1 != null) { - if(StringUtils.isNotEmpty(deviceLogs1.get(0).getLogValue())){ - if (Float.parseFloat(deviceLogs1.get(0).getLogValue()) == Float.parseFloat(deviceLogs1.get(1).getLogValue())) - { - hashMap.put("upType", 1); - } else if (Float.parseFloat(deviceLogs1.get(0).getLogValue()) < Float.parseFloat(deviceLogs1.get(1).getLogValue())) { - hashMap.put("upType", -1); + if(deviceLogs1.size() > 0){ + if (StringUtils.isNotEmpty(deviceLogs1.get(0).getLogValue())) { + if(deviceLogs1.size() > 1){ + if (Float.parseFloat(deviceLogs1.get(0).getLogValue()) == Float.parseFloat(deviceLogs1.get(1).getLogValue())) { + hashMap.put("upType", 1); + } else if (Float.parseFloat(deviceLogs1.get(0).getLogValue()) < Float.parseFloat(deviceLogs1.get(1).getLogValue())) { + hashMap.put("upType", -1); + } + }else{ + hashMap.put("upType", 0); + } + hashMap.put("value", deviceLogs1.get(0).getLogValue()); + } else { + hashMap.put("value", "--"); + hashMap.put("upType", 0); } - hashMap.put("value", deviceLogs1.get(0).getLogValue()); + }else{ hashMap.put("value", "--"); hashMap.put("upType", 0); } + } } else if (hashMap.size() > 0) { List deviceLogs2 = taiyangnengCollect.get(thingsModel.getIdentifier()); @@ -173,8 +188,8 @@ public class GisDeviceServiceImpl implements IGisDeviceService { } rMap.put(thingsModel.getIdentifier(), hashMap); } - }else{ - for (ThingsModel thingsModel : taiyangnengModels){ + } else { + for (ThingsModel thingsModel : taiyangnengModels) { HashMap hashMap = new HashMap() {{ put("upType", 0); put("identifier", thingsModel.getIdentifier()); @@ -185,33 +200,195 @@ public class GisDeviceServiceImpl implements IGisDeviceService { rMap.put(thingsModel.getIdentifier(), hashMap); } } - //安防信息 - String anfangIds = devParams.get("anfangIds").toString(); - HashMap hashMap = new HashMap() {{ - put("upType", 0); - put("identifier", "xiangmen"); - put("unit", ""); - put("value", 0);//0=正常,1=箱门振动,2=箱门打开 - put("name", "箱门状态"); - }}; - rMap.put("xiangmen",hashMap); - //机井信息 - HashMap hashMap1 = new HashMap() {{ - put("upType", 0); - put("identifier", "sumFlow"); - put("unit", "m³"); - put("value", 0); - put("name", "累计用水量"); - }}; - rMap.put("sumFlow",hashMap1); + //箱门信息 + String guimenIds = devParams.get("guimenIds").toString(); + ThingsModel thingsModel3 = new ThingsModel(); + thingsModel3.setProductId(140L); + List guimenModels = thingsModelService.selectThingsModelList(thingsModel3); + if (StringUtils.isNotEmpty(taiyangnengIds)) { + Device guimenDevice = deviceMapper.selectDeviceByDeviceId(Long.parseLong(guimenIds)); + List deviceLogs = logService.selectDeviceLogList(new DeviceLog() {{ + setSerialNumber(guimenDevice.getSerialNumber()); + setBeginTime(DateUtil.beginOfDay(DateUtil.offsetDay(dateTime, -1)).toString()); + setEndTime(DateUtil.endOfDay(dateTime).toString()); + }}); + Map> guimenCollect = deviceLogs.stream().sorted(Comparator + .comparing(DeviceLog::getCreateTime, Comparator + .nullsFirst(Comparator.naturalOrder())).reversed()).collect(Collectors.groupingBy(t -> t.getIdentity())); + for (ThingsModel thingsModel : guimenModels) { + HashMap hashMap1 = new HashMap() {{ + put("upType", 0); + put("identifier", thingsModel.getIdentifier().equals("三菱FX2N_1_open")?"xiangmen":thingsModel.getIdentifier()); + put("unit", ""); + put("value", 0); + put("name", thingsModel.getModelName()); + }}; + if (StringUtils.isNotEmpty(thingsModel.getSpecs())) { + String specs = thingsModel.getSpecs(); + JSONObject parse = (JSONObject) JSON.parse(specs); + if (parse.containsKey("unit")) { + hashMap1.put("unit", parse.get("unit")); + } + } + + if (hashMap1.size() > 1) { + List deviceLogs1 = guimenCollect.get(thingsModel.getIdentifier()); + if (deviceLogs1 != null) { + if(deviceLogs1.size() > 0){ + if (StringUtils.isNotEmpty(deviceLogs1.get(0).getLogValue())) { + if(deviceLogs1.size() > 1){ + if (Float.parseFloat(deviceLogs1.get(0).getLogValue()) == Float.parseFloat(deviceLogs1.get(1).getLogValue())) { + hashMap1.put("upType", 1); + } else if (Float.parseFloat(deviceLogs1.get(0).getLogValue()) < Float.parseFloat(deviceLogs1.get(1).getLogValue())) { + hashMap1.put("upType", -1); + } + }else{ + hashMap1.put("upType", 0); + } + hashMap1.put("value", deviceLogs1.get(0).getLogValue()); + } else { + hashMap1.put("value", "--"); + hashMap1.put("upType", 0); + } + + }else{ + hashMap1.put("value", "--"); + hashMap1.put("upType", 0); + } + + + } + } else if (hashMap1.size() > 0) { + List deviceLogs3 = guimenCollect.get(thingsModel.getIdentifier()); + if (deviceLogs3 != null) { + hashMap1.put("value", deviceLogs3.get(0).getLogValue()); + } + } + rMap.put(thingsModel.getIdentifier().equals("三菱FX2N_1_open")?"xiangmen":thingsModel.getIdentifier(), hashMap1); + } + } else { + for (ThingsModel thingsModel : taiyangnengModels) { + HashMap hashMap1 = new HashMap() {{ + put("upType", 0); + put("identifier", thingsModel.getIdentifier().equals("三菱FX2N_1_open")?"xiangmen":thingsModel.getIdentifier()); + put("unit", ""); + put("value", 0); + put("name", thingsModel.getModelName()); + }}; + rMap.put(thingsModel.getIdentifier().equals("三菱FX2N_1_open")?"xiangmen":thingsModel.getIdentifier(), hashMap1); + } + } +// HashMap hashMap = new HashMap() {{ +// put("upType", 0); +// put("identifier", "xiangmen"); +// put("unit", ""); +// put("value", 0);//0=正常,1=箱门振动,2=箱门打开 +// put("name", "箱门状态"); +// }}; +// rMap.put("xiangmen", hashMap); + String liuliangIds = devParams.get("liuliangIds").toString(); + ThingsModel thingsModel2 = new ThingsModel(); + thingsModel2.setProductId(139L); + List liuliangModels = thingsModelService.selectThingsModelList(thingsModel2); + if (StringUtils.isNotEmpty(taiyangnengIds)) { + Device liuliangDevice = deviceMapper.selectDeviceByDeviceId(Long.parseLong(liuliangIds)); + List deviceLogs = logService.selectDeviceLogList(new DeviceLog() {{ + setSerialNumber(liuliangDevice.getSerialNumber()); + setBeginTime(DateUtil.beginOfDay(DateUtil.offsetDay(dateTime, -1)).toString()); + setEndTime(DateUtil.endOfDay(dateTime).toString()); + }}); + Map> liuliangCollect = deviceLogs.stream().sorted(Comparator + .comparing(DeviceLog::getCreateTime, Comparator + .nullsFirst(Comparator.naturalOrder())).reversed()).collect(Collectors.groupingBy(t -> t.getIdentity())); + for (ThingsModel thingsModel : liuliangModels) { + HashMap hashMap1 = new HashMap() {{ + put("upType", 0); + put("identifier", thingsModel.getIdentifier().equals("三菱FX2N_1_sumFlow")?"sumFlow":thingsModel.getIdentifier()); + put("unit", ""); + put("value", 0); + put("name", thingsModel.getModelName()); + }}; + if (StringUtils.isNotEmpty(thingsModel.getSpecs())) { + String specs = thingsModel.getSpecs(); + JSONObject parse = (JSONObject) JSON.parse(specs); + if (parse.containsKey("unit")) { + hashMap1.put("unit", parse.get("unit")); + } + } + + if (hashMap1.size() > 1) { + List deviceLogs1 = liuliangCollect.get(thingsModel.getIdentifier()); + if (deviceLogs1 != null) { + if(deviceLogs1.size() > 0){ + if (StringUtils.isNotEmpty(deviceLogs1.get(0).getLogValue())) { + if(deviceLogs1.size() > 1){ + if (Float.parseFloat(deviceLogs1.get(0).getLogValue()) == Float.parseFloat(deviceLogs1.get(1).getLogValue())) { + hashMap1.put("upType", 1); + } else if (Float.parseFloat(deviceLogs1.get(0).getLogValue()) < Float.parseFloat(deviceLogs1.get(1).getLogValue())) { + hashMap1.put("upType", -1); + } + }else{ + hashMap1.put("upType", 0); + } + hashMap1.put("value", deviceLogs1.get(0).getLogValue()); + } else { + hashMap1.put("value", "--"); + hashMap1.put("upType", 0); + } + + }else{ + hashMap1.put("value", "--"); + hashMap1.put("upType", 0); + } + + + } + } else if (hashMap1.size() > 0) { + List deviceLogs2 = liuliangCollect.get(thingsModel.getIdentifier()); + if (deviceLogs2 != null) { + hashMap1.put("value", deviceLogs2.get(0).getLogValue()); + } + } + rMap.put(thingsModel.getIdentifier().equals("三菱FX2N_1_sumFlow")?"sumFlow":thingsModel.getIdentifier(), hashMap1); + } + } else { + for (ThingsModel thingsModel : taiyangnengModels) { + HashMap hashMap1 = new HashMap() {{ + put("upType", 0); + put("identifier", thingsModel.getIdentifier().equals("三菱FX2N_1_sumFlow")?"sumFlow":thingsModel.getIdentifier()); + put("unit", ""); + put("value", 0); + put("name", thingsModel.getModelName()); + }}; + rMap.put(thingsModel.getIdentifier().equals("三菱FX2N_1_sumFlow")?"sumFlow":thingsModel.getIdentifier(), hashMap1); + } + } +// HashMap hashMap1 = new HashMap() {{ +// put("upType", 0); +// put("identifier", "sumFlow"); +// put("unit", "m³"); +// put("value", 0); +// put("name", "累计用水量"); +// }}; +// rMap.put("sumFlow", hashMap1); + MaWatereleRecord maWatereleRecord = new MaWatereleRecord(); + maWatereleRecord.setDevSn(device.getSerialNumber()); + TableDataInfo tableDataInfo = watereleRecordService.selectMaWatereleRecordList(maWatereleRecord); + List deviceLogs = (List) tableDataInfo.getRows(); + String sumEle = "0"; + if(deviceLogs.size() > 0){ + sumEle = NumberUtil.isNumber(deviceLogs.get(0).getSumele())?deviceLogs.get(0).getSumele(): + "0"; + } + String finalSumEle = sumEle; HashMap hashMap2 = new HashMap() {{ put("upType", 0); put("identifier", "sumEle"); - put("unit", "度"); - put("value", 0); + put("unit", "kwh"); + put("value", finalSumEle); put("name", "累计用电量"); }}; - rMap.put("sumEle",hashMap2); + rMap.put("sumEle", hashMap2); return rMap; } @@ -228,8 +405,9 @@ public class GisDeviceServiceImpl implements IGisDeviceService { //获取累计水量和累计电量的前20条数据记录 MaWatereleRecord watereleRecord = new MaWatereleRecord(); watereleRecord.setDevSn(device.getSerialNumber()); - List maWatereleRecords = (List) watereleRecordService.selectMaWatereleRecordList(watereleRecord).getRows(); - if(maWatereleRecords.size() > 20){ + List maWatereleRecords = + (List) watereleRecordService.selectMaWatereleRecordList(watereleRecord).getRows(); + if (maWatereleRecords.size() > 20) { maWatereleRecords = maWatereleRecords.subList(0, 20); } maWatereleRecords.sort(Comparator.comparing(MaWatereleRecord::getCreateTime)); @@ -237,7 +415,7 @@ public class GisDeviceServiceImpl implements IGisDeviceService { ArrayList sumEle = new ArrayList<>(); ArrayList time = new ArrayList<>(); for (MaWatereleRecord record : maWatereleRecords) { - time.add(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,record.getCreateTime())); + time.add(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, record.getCreateTime())); sumFlow.add(record.getSumflow()); sumEle.add(record.getSumele()); } @@ -255,11 +433,11 @@ public class GisDeviceServiceImpl implements IGisDeviceService { kvHashMap.put("identity", identity); kvHashMap.put("serialNumber", device.getSerialNumber()); Date endTime = new Date(); - kvHashMap.put("endTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,endTime)); + kvHashMap.put("endTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, endTime)); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); - calendar.add(Calendar.HOUR,-23); - kvHashMap.put("beginTime",DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH,calendar.getTime())+":00:00"); + calendar.add(Calendar.HOUR, -23); + kvHashMap.put("beginTime", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH, calendar.getTime()) + ":00:00"); List> reMap = logService.selectDayData(kvHashMap); Map> create_time = new HashMap<>(); if (reMap != null) { @@ -277,10 +455,10 @@ public class GisDeviceServiceImpl implements IGisDeviceService { time.add(s); Map map = create_time.get(s); if (map != null) { - if(identity.equals("dataSumFlow")){ + if (identity.equals("dataSumFlow")) { jiangyvliang.add(Float.parseFloat(create_time.get(s).get("maxLogValue").toString()) - Float.parseFloat(create_time.get(s).get("minLogValue").toString())); - }else{ + } else { jiangyvliang.add(create_time.get(s).get("avgLogValue")); } } else { @@ -293,7 +471,7 @@ public class GisDeviceServiceImpl implements IGisDeviceService { public Map getDevParams(Device device) { Map devData = new HashMap<>(); - try{ + try { Object devParams = com.alibaba.fastjson.JSON.parse(device.getDevParams()); //先转换成Object List> Params = (List>) devParams; if (Params != null) { @@ -301,7 +479,7 @@ public class GisDeviceServiceImpl implements IGisDeviceService { devData.put(param.get("key").toString(), param.get("value").toString()); } } - }catch (Exception exception){ + } catch (Exception exception) { } return devData;