From 910256b33626699f4449eb7436d0b7c55081aeda Mon Sep 17 00:00:00 2001 From: tongliran Date: Thu, 2 Jan 2025 14:34:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=81=E9=87=8F=E8=AE=A1?= =?UTF-8?q?=E7=9E=AC=E6=97=B6=E6=B5=81=E9=87=8F=E5=92=8C=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E7=9A=84=E5=9B=BE=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NgFlowDeviceDataController.java | 13 +++ .../domain/dto/NgFlowDeviceDataChartsDto.java | 11 +++ .../iot/service/INgFlowDeviceDataService.java | 4 + .../impl/NgFlowDeviceDataServiceImpl.java | 85 ++++++++++++++++++- 4 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/dto/NgFlowDeviceDataChartsDto.java diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/controller/userRecharge/NgFlowDeviceDataController.java b/fastbee-open-api/src/main/java/com/fastbee/data/controller/userRecharge/NgFlowDeviceDataController.java index e891374..d5892be 100644 --- a/fastbee-open-api/src/main/java/com/fastbee/data/controller/userRecharge/NgFlowDeviceDataController.java +++ b/fastbee-open-api/src/main/java/com/fastbee/data/controller/userRecharge/NgFlowDeviceDataController.java @@ -3,7 +3,9 @@ package com.fastbee.data.controller.userRecharge; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.fastbee.iot.domain.dto.NgFlowDeviceDataChartsDto; import com.fastbee.iot.domain.dto.NgFlowDeviceDataDto; +import com.fastbee.rechargecard.domain.dto.NgWaterPumpUsageRecordsChartsDto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +38,17 @@ public class NgFlowDeviceDataController extends BaseController @Autowired private INgFlowDeviceDataService ngFlowDeviceDataService; + /** + * 流量计瞬时流量累计流量的图表 + */ +// @PreAuthorize("@ss.hasPermi('rechargecard:records:list')") + @GetMapping("/charts") + @ApiOperation("流量计瞬时流量累计流量的图表") + public AjaxResult FlowCharts(@RequestBody NgFlowDeviceDataChartsDto ngFlowDeviceDataChartsDto) + { + return success(ngFlowDeviceDataService.selectNgFlowDeviceDataFlowCharts(ngFlowDeviceDataChartsDto.getDeviceNumber(),ngFlowDeviceDataChartsDto.getStartTime(),ngFlowDeviceDataChartsDto.getEndTime())); + } + /** * 查询流量计设备数据列表 */ diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/dto/NgFlowDeviceDataChartsDto.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/dto/NgFlowDeviceDataChartsDto.java new file mode 100644 index 0000000..0875bbd --- /dev/null +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/dto/NgFlowDeviceDataChartsDto.java @@ -0,0 +1,11 @@ +package com.fastbee.iot.domain.dto; + +import lombok.Data; + +import java.util.Date; +@Data +public class NgFlowDeviceDataChartsDto { + private String deviceNumber; + private Date startTime; + private Date endTime; +} diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/INgFlowDeviceDataService.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/INgFlowDeviceDataService.java index d28fc99..cc25747 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/INgFlowDeviceDataService.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/INgFlowDeviceDataService.java @@ -1,6 +1,8 @@ package com.fastbee.iot.service; +import java.util.Date; import java.util.List; +import java.util.Map; import com.baomidou.mybatisplus.extension.service.IService; import com.fastbee.iot.domain.NgFlowDeviceData; @@ -14,6 +16,8 @@ import com.fastbee.iot.domain.dto.NgFlowDeviceDataDto; */ public interface INgFlowDeviceDataService extends IService { + public Map selectNgFlowDeviceDataFlowCharts(String deviceNumber, Date startTime, Date endTime); + /** * 查询流量计设备数据列表 * diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/NgFlowDeviceDataServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/NgFlowDeviceDataServiceImpl.java index d842b1e..247cee9 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/NgFlowDeviceDataServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/NgFlowDeviceDataServiceImpl.java @@ -1,9 +1,12 @@ package com.fastbee.iot.service.impl; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.SimpleDateFormat; +import java.util.*; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fastbee.deviceData.domain.DeviceRealtimedataMeteorology; import com.fastbee.deviceData.mapper.DeviceRealtimedataMeteorologyMapper; @@ -26,6 +29,82 @@ public class NgFlowDeviceDataServiceImpl extends ServiceImpl selectNgFlowDeviceDataFlowCharts(String deviceNumber, Date startTime, Date endTime) { + QueryWrapper queryWrapper=new QueryWrapper<>(); + Map resultMap=new HashMap<>(); + List insList=new ArrayList<>(); + List sumList=new ArrayList<>(); + List timeList=new ArrayList<>(); + + Date start = DateUtil.beginOfDay(DateUtil.date());// 获取今日零点时间 + Date now = DateUtil.date();// 获取当前时间 + // 获取当前整点时刻的时间 + Date end = DateUtil.beginOfHour(now);//用当前整点时刻时间作为结束时间 + if (startTime != null && endTime != null) { + //如果有时间筛选,按照时间筛选为起止时间 + start=startTime; + end=endTime; + } + + queryWrapper.between("real_time", start, end); + queryWrapper.eq("device_number",deviceNumber); + List list=ngFlowDeviceDataMapper.selectList(queryWrapper);//获取根据时间和设备编码筛选后的数据 + + while(start.compareTo(end) <=0 )//start<=end + { + //整点时间数据=前半个小时到后半个小时的平均数据,即12点数据=11:30到12:30的平均值 + Date tempStart=DateUtil.offsetMinute(start,-30);//前半个小时时间 + Date tempEnd=DateUtil.offsetMinute(start,30);//后半个小时时间 + if(tempEnd.after(now)) + { + tempEnd=now;//用来处理当前是12:10但需要获取12点数据的情况 + } + BigDecimal insData=new BigDecimal("0");//瞬时流量总和 + BigDecimal sumData=new BigDecimal("0");//累计流量总和 + int num=0; + for(int i=0;i=0 && temp.getRealTime().compareTo(tempEnd)<=0) + { + BigDecimal insFlow=new BigDecimal(temp.getInFlow());//瞬时流量 + insData=insData.add(insFlow); + BigDecimal sumFlow=new BigDecimal(temp.getSumFlow());//累计流量 + sumData=sumData.add(sumFlow); + num++; + } + } + BigDecimal insResult=new BigDecimal("0"); + BigDecimal sumResult=new BigDecimal("0"); + if(num>0) + { + insResult = insData.divide(new BigDecimal(String.valueOf(num)), 2, RoundingMode.HALF_UP);//计算瞬时流量平均值 + sumResult=sumData.divide(new BigDecimal(String.valueOf(num)),2,RoundingMode.HALF_UP);//计算累计流量平均值 + } + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");//格式化为时:分 + String formattedDate = sdf.format(start); + timeList.add(formattedDate); + insList.add(insResult); + sumList.add(sumResult); + + start=DateUtil.offsetHour(start,1);//start添加一个小时 + } + resultMap.put("time",timeList); + resultMap.put("insFlow",insList); + resultMap.put("sumFlow",sumList); + + return resultMap; + } + /** * 根据时间查询流量计历史数据 * @param ngFlowDeviceData 流量计设备数据