添加流量计瞬时流量和累计流量的图表接口
This commit is contained in:
@ -3,7 +3,9 @@ package com.fastbee.data.controller.userRecharge;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.fastbee.iot.domain.dto.NgFlowDeviceDataChartsDto;
|
||||||
import com.fastbee.iot.domain.dto.NgFlowDeviceDataDto;
|
import com.fastbee.iot.domain.dto.NgFlowDeviceDataDto;
|
||||||
|
import com.fastbee.rechargecard.domain.dto.NgWaterPumpUsageRecordsChartsDto;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -36,6 +38,17 @@ public class NgFlowDeviceDataController extends BaseController
|
|||||||
@Autowired
|
@Autowired
|
||||||
private INgFlowDeviceDataService ngFlowDeviceDataService;
|
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()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询流量计设备数据列表
|
* 查询流量计设备数据列表
|
||||||
*/
|
*/
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
package com.fastbee.iot.service;
|
package com.fastbee.iot.service;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.fastbee.iot.domain.NgFlowDeviceData;
|
import com.fastbee.iot.domain.NgFlowDeviceData;
|
||||||
@ -14,6 +16,8 @@ import com.fastbee.iot.domain.dto.NgFlowDeviceDataDto;
|
|||||||
*/
|
*/
|
||||||
public interface INgFlowDeviceDataService extends IService<NgFlowDeviceData>
|
public interface INgFlowDeviceDataService extends IService<NgFlowDeviceData>
|
||||||
{
|
{
|
||||||
|
public Map<String,Object> selectNgFlowDeviceDataFlowCharts(String deviceNumber, Date startTime, Date endTime);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询流量计设备数据列表
|
* 查询流量计设备数据列表
|
||||||
*
|
*
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
package com.fastbee.iot.service.impl;
|
package com.fastbee.iot.service.impl;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.math.RoundingMode;
|
||||||
import java.util.List;
|
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.fastbee.deviceData.domain.DeviceRealtimedataMeteorology;
|
import com.fastbee.deviceData.domain.DeviceRealtimedataMeteorology;
|
||||||
import com.fastbee.deviceData.mapper.DeviceRealtimedataMeteorologyMapper;
|
import com.fastbee.deviceData.mapper.DeviceRealtimedataMeteorologyMapper;
|
||||||
@ -26,6 +29,82 @@ public class NgFlowDeviceDataServiceImpl extends ServiceImpl<NgFlowDeviceDataMap
|
|||||||
@Autowired
|
@Autowired
|
||||||
private NgFlowDeviceDataMapper ngFlowDeviceDataMapper;
|
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到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<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 流量计设备数据
|
* @param ngFlowDeviceData 流量计设备数据
|
||||||
|
Reference in New Issue
Block a user