1.终端状态统计

This commit is contained in:
njcn_dhj
2022-08-26 13:57:03 +08:00
parent 8e0ae10160
commit fda3b2c172
2 changed files with 79 additions and 17 deletions

View File

@@ -27,4 +27,7 @@ public class PulicTimeParam {
@Pattern(regexp = PatternRegex.TIME_FORMAT, message = "时间格式错误")
private String searchEndTime;
@ApiModelProperty("时间标识:0--年/季度1--月")
private Integer timeFlag;
}

View File

@@ -1,6 +1,9 @@
package com.njcn.device.service.impl;
import cn.hutool.core.date.DateUtil;
import com.njcn.device.api.LineFeignClient;
import com.njcn.device.pojo.po.Communicate;
import com.njcn.device.pojo.vo.AbnomalCommuncateVO;
import com.njcn.device.pojo.vo.CommunicateVO;
import com.njcn.device.pojo.param.PulicTimeParam;
import com.njcn.device.pojo.param.PulicTimeStatisParam;
@@ -22,9 +25,7 @@ import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import static com.njcn.influxdb.param.InfluxDBPublicParam.*;
@@ -70,21 +71,52 @@ public class CommunicateServiceImpl implements CommunicateService {
List<DeviceOnlineDataVO> deviceOnlineDataList = new ArrayList<>();
//根据监测点id获取终端id
String devId = lineService.getLineIdByDevId(pulicTimeParam.getId());
DecimalFormat decimalFormat=new DecimalFormat(".00");
DecimalFormat decimalFormat = new DecimalFormat(".00");
Float floatList;
// 获取两个时间的之间的月份
List<String> intervalTime = this.getIntervalTime(pulicTimeParam.getSearchBeginTime(), pulicTimeParam.getSearchEndTime());
for (String interTime : intervalTime) {
DeviceOnlineDataVO inter = new DeviceOnlineDataVO();
String startTime, endTime;
inter.setMonth(interTime.substring(5));
inter.setYear(interTime.substring(0, 4));
startTime = PublicDateUtil.getFisrtDayOfMonth(Integer.parseInt(interTime.substring(0,4)),Integer.parseInt(interTime.substring(5)));
endTime = PublicDateUtil.getLastDayOfMonth(Integer.parseInt(interTime.substring(0,4)),Integer.parseInt(interTime.substring(5)));
SimpleValue temp;
floatList = getCondition(devId, startTime, endTime, 1);
inter.setOnlineRate(Float.parseFloat(decimalFormat.format(floatList*100)));
deviceOnlineDataList.add(inter);
if (pulicTimeParam.getTimeFlag() == 0) {
// 获取两个时间的之间的月份
List<String> intervalTime = this.getIntervalTime(pulicTimeParam.getSearchBeginTime(), pulicTimeParam.getSearchEndTime());
for (String interTime : intervalTime) {
DeviceOnlineDataVO inter = new DeviceOnlineDataVO();
String startTime, endTime;
inter.setMonth(interTime.substring(5));
inter.setYear(interTime.substring(0, 4));
inter.setDay("/");
startTime = PublicDateUtil.getFisrtDayOfMonth(Integer.parseInt(interTime.substring(0, 4)), Integer.parseInt(interTime.substring(5)));
endTime = PublicDateUtil.getLastDayOfMonth(Integer.parseInt(interTime.substring(0, 4)), Integer.parseInt(interTime.substring(5)));
floatList = getCondition(devId, startTime, endTime, 1);
if (floatList == 0) {
inter.setOnlineRate(3.14159f);
} else {
inter.setOnlineRate(Float.parseFloat(decimalFormat.format(floatList * 100)));
}
deviceOnlineDataList.add(inter);
}
} else {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dt = simpleDateFormat.parse(pulicTimeParam.getSearchBeginTime());
Date dtDate = simpleDateFormat.parse(pulicTimeParam.getSearchEndTime());
Integer year = Integer.valueOf(String.format("%tY", dt));
Integer mon = Integer.valueOf(String.format("%tm", dt));
Integer day = Integer.valueOf(String.format("%td", dtDate));
List<String> intervalTime = this.getIntervalDateTime(year, mon,day);
for (String interTime : intervalTime) {
DeviceOnlineDataVO inter = new DeviceOnlineDataVO();
String startTime, endTime;
inter.setMonth(interTime.substring(5, 7));
inter.setYear(interTime.substring(0, 4));
inter.setDay(interTime.substring(8));
startTime =sdf.format(DateUtil.beginOfDay(DateUtil.parse(interTime)));
endTime = sdf.format(DateUtil.endOfDay(DateUtil.parse(interTime)));
floatList = getCondition(devId, startTime, endTime, 1);
if (floatList == 0) {
inter.setOnlineRate(3.14159f);
} else {
inter.setOnlineRate(Float.parseFloat(decimalFormat.format(floatList * 100)));
}
deviceOnlineDataList.add(inter);
}
}
return deviceOnlineDataList;
}
@@ -226,4 +258,31 @@ public class CommunicateServiceImpl implements CommunicateService {
}
return times;
}
@SneakyThrows
private List<String> getIntervalDateTime(Integer startTime, Integer endTime,Integer dd) {
List<String> list = new ArrayList<>();
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.set(startTime, endTime - 1, 1);
int year = calendar.get(Calendar.YEAR);//年份
int month = calendar.get(Calendar.MONTH) + 1;//月份
for (int i = 1; i <= dd; i++) {
String date = null;
if (month < 10 && i < 10) {
date = year + "-0" + month + "-0" + i;
}
if (month < 10 && i >= 10) {
date = year + "-0" + month + "-" + i;
}
if (month >= 10 && i < 10) {
date = year + "-" + month + "-0" + i;
}
if (month >= 10 && i >= 10) {
date = year + "-" + month + "-" + i;
}
list.add(date);
}
return list;
}
}