添加流量计瞬时流量和累计流量的图表接口

This commit is contained in:
童丽然 2025-01-02 14:34:03 +08:00
parent 17dadbf393
commit 910256b336
4 changed files with 110 additions and 3 deletions

View File

@ -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()));
}
/**
* 查询流量计设备数据列表
*/

View File

@ -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;
}

View File

@ -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<NgFlowDeviceData>
{
public Map<String,Object> selectNgFlowDeviceDataFlowCharts(String deviceNumber, Date startTime, Date endTime);
/**
* 查询流量计设备数据列表
*

View File

@ -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<NgFlowDeviceDataMap
@Autowired
private NgFlowDeviceDataMapper ngFlowDeviceDataMapper;
/**
* 获取流量计瞬时流量累计流量图表
* @param deviceNumber
* @param startTime
* @param endTime
* @return
*/
@Override
public Map<String, Object> selectNgFlowDeviceDataFlowCharts(String deviceNumber, Date startTime, Date endTime) {
QueryWrapper<NgFlowDeviceData> queryWrapper=new QueryWrapper<>();
Map<String,Object> resultMap=new HashMap<>();
List<BigDecimal> insList=new ArrayList<>();
List<BigDecimal> sumList=new ArrayList<>();
List<String> 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<NgFlowDeviceData> list=ngFlowDeviceDataMapper.selectList(queryWrapper);//获取根据时间和设备编码筛选后的数据
while(start.compareTo(end) <=0 )//start<=end
{
//整点时间数据=前半个小时到后半个小时的平均数据即12点数据=11:30到1230的平均值
Date tempStart=DateUtil.offsetMinute(start,-30);//前半个小时时间
Date tempEnd=DateUtil.offsetMinute(start,30);//后半个小时时间
if(tempEnd.after(now))
{
tempEnd=now;//用来处理当前是1210但需要获取12点数据的情况
}
BigDecimal insData=new BigDecimal("0");//瞬时流量总和
BigDecimal sumData=new BigDecimal("0");//累计流量总和
int num=0;
for(int i=0;i<list.size();i++)
{
NgFlowDeviceData temp=list.get(i);
//如果时间符合条件
if(temp.getRealTime().compareTo(tempStart)>=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 流量计设备数据