业务管理员-终端运维管理-主列表-流量详情接口开发

This commit is contained in:
zhuxinyu
2023-04-03 19:32:21 +08:00
parent 3248bbe83c
commit 7cabd4c4c3
15 changed files with 165 additions and 40 deletions

View File

@@ -227,6 +227,8 @@ public interface InfluxDBPublicParam {
*/
String PQS_COMMUNICATE = "pqs_communicate";
String PQS_ACTUAL_FLOW = "pqs_actual_flow";
/**
* 终端在线率表
*/

View File

@@ -0,0 +1,28 @@
package com.njcn.device.pq.pojo.po.influxdb;
import lombok.Data;
import org.influxdb.annotation.Column;
import org.influxdb.annotation.Measurement;
import java.time.Instant;
import java.time.LocalDateTime;
@Data
@Measurement(name = "pqs_actual_flow")
public class DeviceDayFlow {
@Column(name="time")
private Instant time;
@Column(name="actual_value")
private Integer actualValue;
@Column(name="dev_id")
private String devId;
private float dailyActualValue;
private String date;
private String month;
}

View File

@@ -1,5 +1,6 @@
package com.njcn.device.pq.pojo.vo;
import com.njcn.device.pq.pojo.po.influxdb.DeviceDayFlow;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
@@ -7,6 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
@Data
@ApiModel(value = "装置每日流量VO")
@@ -16,12 +18,20 @@ public class TerminalDaliyFlowVO {
@ApiModelProperty(name = "devId",value = "装置Id")
private String devId;
@ApiModelProperty(name = "date",value = "日期")
private LocalDateTime date;
@ApiModelProperty(name = "actualValue",value = "实际使用流量")
@ApiModelProperty(name = "month",value = "月份")
private String month;
@ApiModelProperty(name = "actualValue",value = "实际使用流量")
private Float actualValue;
@ApiModelProperty(name = "statisValue",value = "统计流量")
@ApiModelProperty(name = "statisValue",value = "运营商统计流量")
private Float statisValue;
@ApiModelProperty(name = "baseFlow",value = "基础套餐流量")
private Float baseFlow;
@ApiModelProperty(name = "extendFlow",value = "拓展套餐流量")
private Float extendFlow;
@ApiModelProperty(name = "flowMeal",value = "套餐流量(基础+拓展)")
private Float flowMeal;
@ApiModelProperty(name = "deviceDayFlowsList",value = "装置日流量统计集合")
private List<DeviceDayFlow> deviceDayFlowsList;
}

View File

@@ -110,8 +110,10 @@ public class OperationContrController extends BaseController {
@ApiImplicitParam(name = "deviceInfoParam", value = "实体", required = true)
public HttpResult<Page<LineFlowMealDetailVO>> getNewDeviceRunStatistics(@RequestBody PqsParam deviceInfoParam){
String methodDescribe = getMethodDescribe("getDeviceRunStatistics");
DeviceInfoParam param = new DeviceInfoParam(RequestUtil.getDeptIndex(),null);
deviceInfoParam.setDeptIndex(param.getDeptIndex());
// DeviceInfoParam param = new DeviceInfoParam(RequestUtil.getDeptIndex(),null);
// deviceInfoParam.setDeptIndex(param.getDeptIndex());
// 本地测试
deviceInfoParam.setDeptIndex("9b8f910f3c3ad4b049b6abda59d66419");
LogUtil.njcnDebug(log, "{},参数集合:{}", methodDescribe, deviceInfoParam);
Page<LineFlowMealDetailVO> result = lineService.getNewDeviceRunStatistics(deviceInfoParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);

View File

@@ -40,7 +40,7 @@ import java.util.Objects;
@Slf4j
@Api(tags = "终端运维管理")
@RestController
@RequestMapping("maintain")
@RequestMapping("/maintain")
@RequiredArgsConstructor
@Validated
public class TerminalMaintainController extends BaseController {
@@ -96,11 +96,11 @@ public class TerminalMaintainController extends BaseController {
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getFlowManageDetail")
@ApiOperation("终端流量管理列表")
public HttpResult<Page<TerminalDaliyFlowVO>> getFlowManageDetail(@RequestBody TerminalMainQueryParam param) {
@ApiOperation("终端流量管理详情")
public HttpResult<List<TerminalDaliyFlowVO>> getFlowManageDetail(@RequestBody TerminalMainQueryParam param) {
String methodDescribe = getMethodDescribe("getFlowManageDetail");
Page<TerminalDaliyFlowVO> resList = terminalMaintainService.getFlowManageDetail(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, resList, methodDescribe);
List<TerminalDaliyFlowVO> res = terminalMaintainService.getFlowManageDetail(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, res, methodDescribe);
}
/**

View File

@@ -76,5 +76,5 @@ public interface TerminalMaintainMapper {
List<TerminalMaintainVO> getFlowStrategyList(@Param("ids") List<String> ids);
Page<TerminalDaliyFlowVO>getFlowManageDetail(Page<TerminalDaliyFlowVO> page, @Param("devId") String deviceId);
TerminalDaliyFlowVO getFlowManageDetail(@Param("devId") String deviceId);
}

View File

@@ -788,7 +788,7 @@
INNER JOIN pq_device b ON vol.pid = b.id
INNER JOIN pq_line sub ON dev.pid = sub.id
INNER JOIN pq_line elc ON sub.pid = elc.id
LEFT JOIN cld_month_flow m ON b.id = m.Dev_Id
LEFT JOIN cld_month_flow m ON b.id = m.Line_Id
LEFT JOIN cld_dev_meal c ON b.id = c.line_id
LEFT JOIN cld_flow_meal d ON c.Base_Meal_Id = d.id
LEFT JOIN cld_flow_meal d1 ON c.Ream_Meal_Id = d1.id
@@ -826,7 +826,7 @@
INNER JOIN pq_device b ON vol.pid = b.id
INNER JOIN pq_line sub ON dev.pid = sub.id
INNER JOIN pq_line elc ON sub.pid = elc.id
LEFT JOIN cld_month_flow m ON b.id = m.Dev_Id
LEFT JOIN cld_month_flow m ON b.id = m.Line_Id
LEFT JOIN cld_dev_meal c ON b.id = c.line_id
LEFT JOIN cld_flow_meal d ON c.Base_Meal_Id = d.id
LEFT JOIN cld_flow_meal d1 ON c.Ream_Meal_Id = d1.id
@@ -855,7 +855,7 @@
ifnull(m.Actual_Value,0) statisValue
FROM pq_line a
INNER JOIN pq_device b ON a.id = b.id
LEFT JOIN cld_month_flow m ON b.id = m.Dev_Id
LEFT JOIN cld_month_flow m ON b.id = m.Line_Id
LEFT JOIN cld_dev_meal c ON b.id = c.line_id
LEFT JOIN cld_flow_meal d ON c.Base_Meal_Id = d.id
LEFT JOIN cld_flow_meal d1 ON c.Ream_Meal_Id = d1.id

View File

@@ -125,7 +125,14 @@ FROM
</select>
<select id="getFlowManageDetail" resultType="com.njcn.device.pq.pojo.vo.TerminalDaliyFlowVO">
SELECT
FROM
c.Line_Id devId,
IFNULL(d.flow, (select flow from cld_flow_meal where type = 0 and flag = 1)) baseFlow,
IFNULL(d1.flow, 0) extendFlow,
IFNULL(d.flow, (select flow from cld_flow_meal where type = 0 and flag = 1)) + IFNULL(d1.flow, 0) flowMeal
FROM cld_dev_meal c
LEFT JOIN cld_flow_meal d ON c.Base_Meal_Id = d.id
LEFT JOIN cld_flow_meal d1 ON c.Ream_Meal_Id = d1.id
WHERE c.Line_Id = #{devId} AND d.State =1 AND d1.State =1
</select>

View File

@@ -54,5 +54,5 @@ public interface TerminalMaintainService {
boolean updateFlowStrategy(TerminalParam terminalParam);
Page<TerminalDaliyFlowVO> getFlowManageDetail(TerminalMainQueryParam param);
List<TerminalDaliyFlowVO> getFlowManageDetail(TerminalMainQueryParam param);
}

View File

@@ -288,8 +288,7 @@ public class GeneralDeviceService {
*/
public List<GeneralDeviceDTO> getDeviceInfo(DeviceInfoParam deviceInfoParam,
List<Integer> runFlag,
List<Integer> devModel)
{
List<Integer> devModel) {
//定义待返回终端信息
List<GeneralDeviceDTO> deviceInfos = new ArrayList<>();
//初始化终端查询条件

View File

@@ -2,6 +2,7 @@ package com.njcn.device.pq.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.dto.SimpleDTO;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
@@ -12,26 +13,34 @@ import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.TerminalMainQueryParam;
import com.njcn.device.pq.pojo.param.TerminalParam;
import com.njcn.device.pq.pojo.po.Communicate;
import com.njcn.device.pq.pojo.po.DevMeal;
import com.njcn.device.pq.pojo.po.DevStrategy;
import com.njcn.device.pq.pojo.po.Device;
import com.njcn.device.pq.pojo.po.influxdb.DeviceDayFlow;
import com.njcn.device.pq.pojo.vo.TerminalDaliyFlowVO;
import com.njcn.device.pq.pojo.vo.TerminalMaintainVO;
import com.njcn.device.pq.service.IDevMealService;
import com.njcn.device.pq.service.IDevStrategyService;
import com.njcn.device.pq.service.IDeviceService;
import com.njcn.device.pq.service.TerminalMaintainService;
import com.njcn.influxdb.param.InfluxDBPublicParam;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.system.pojo.enums.StatisticsEnum;
import com.njcn.user.api.DeptFeignClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* pqs
@@ -56,6 +65,8 @@ public class TerminalMaintainServiceImpl implements TerminalMaintainService {
private final DeptFeignClient deptFeignClient;
private final InfluxDbUtils influxDbUtils;
@Override
public List<TerminalMaintainVO> getTerminalMainList(TerminalMainQueryParam terminalMainQueryParam) {
List<TerminalMaintainVO> resList = new ArrayList<>();
@@ -155,9 +166,49 @@ public class TerminalMaintainServiceImpl implements TerminalMaintainService {
}
@Override
public Page<TerminalDaliyFlowVO> getFlowManageDetail (TerminalMainQueryParam param) {
Page page = terminalMaintainMapper.getFlowManageDetail(new Page(param.getPageNum(), param.getPageSize()), param.getDevId());
return page;
public List<TerminalDaliyFlowVO> getFlowManageDetail(TerminalMainQueryParam param) {
List<TerminalDaliyFlowVO> list = new ArrayList<>();
TerminalDaliyFlowVO flowManageDetail = terminalMaintainMapper.getFlowManageDetail(param.getDevId());
if (flowManageDetail == null) {
list.add(new TerminalDaliyFlowVO());
return list;
}
List<DeviceDayFlow> deviceDayFlowList = getFlowManageDetailFromInfluxDB(param);
float sum = (float) deviceDayFlowList.stream().mapToDouble(DeviceDayFlow::getDailyActualValue).sum();
flowManageDetail.setDeviceDayFlowsList(deviceDayFlowList);
flowManageDetail.setActualValue(sum);
list.add(flowManageDetail);
list.forEach(terminalDaliyFlowVO -> terminalDaliyFlowVO.setMonth(param.getSearchBeginTime().substring(6, 7) + ""));
return list;
}
private List<DeviceDayFlow> getFlowManageDetailFromInfluxDB (TerminalMainQueryParam param) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("time >= '").append(DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime()))).append("' and ").append("time <= '").append(DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))).append("' and ");
stringBuilder.append("dev_id ='").append(param.getDevId()).append("'");
String sql = "select * from " + InfluxDBPublicParam.PQS_ACTUAL_FLOW + " where " + stringBuilder.toString() + InfluxDBPublicParam.TIME_ZONE;
QueryResult result = influxDbUtils.query(sql);
InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper();
List<DeviceDayFlow> deviceDayFlow = influxDBResultMapper.toPOJO(result, DeviceDayFlow.class);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// Instant time = deviceDayFlow.get(0).getTime();
// System.out.println(time);
// Date from = Date.from(time);
// System.out.println(from);
deviceDayFlow.forEach(t-> t.setDate(formatter.format(Date.from(t.getTime()))));
Map<String, List<DeviceDayFlow>> dayFlowMap = deviceDayFlow.stream().collect(Collectors.groupingBy(DeviceDayFlow::getDate));
List<DeviceDayFlow> list = new ArrayList<>();
for (Map.Entry<String, List<DeviceDayFlow>> entry : dayFlowMap.entrySet()) {
DeviceDayFlow dayFlow = new DeviceDayFlow();
dayFlow.setDevId(entry.getValue().get(0).getDevId());
BigDecimal bigDecimal = new BigDecimal((float) entry.getValue().stream().mapToInt(DeviceDayFlow::getActualValue).sum() / (float)1024 /(float) 1024);
dayFlow.setDailyActualValue(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue());
dayFlow.setDate(entry.getKey());
list.add(dayFlow);
}
list = list.stream().sorted(Comparator.comparing(DeviceDayFlow::getDate)).collect(Collectors.toList());
return list;
}
private List<TerminalMaintainVO> getChildren(String id,List<TerminalMaintainVO> all){

View File

@@ -0,0 +1,30 @@
package com.njcn.executor.handler;
import com.njcn.prepare.harmonic.api.device.DeviceAbnormalFeignClient;
import com.njcn.prepare.harmonic.pojo.param.DeviceAbnormaStatisticsParam;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@Slf4j
@Component
@AllArgsConstructor
public class DeviceAbnormalStatisticsJob {
private final DeviceAbnormalFeignClient deviceAbnormalFeignClient;
@XxlJob("deviceAbnormalStatisticsJob")
public void deviceAbnormalStatisticsJob (){
// System.out.println("朱鑫宇定时任务");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String format = formatter.format(Calendar.getInstance().getTime());
System.out.println(format);
log.info("执行日期deviceAbnormalStatisticsJob===============>"+format);
DeviceAbnormaStatisticsParam param =new DeviceAbnormaStatisticsParam();
param.setTime(formatter.format(Calendar.getInstance().getTime()));
deviceAbnormalFeignClient.dailyDeviceAbnormaStatistics(param);
}
}

View File

@@ -9,8 +9,5 @@ import java.io.Serializable;
public class DeviceAbnormaStatisticsParam implements Serializable {
@ApiModelProperty("开始时间")
private String beginTime;
@ApiModelProperty("结束时间")
private String endTime;
private String time;
}

View File

@@ -51,26 +51,26 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist
// 获取监测点数据完整性
List<AlarmPO> lineIntegritys = deviceAbnormaStatisticsMapper.getIntegrityByLineIds(
monotorIds,
DateUtil.beginOfDay(DateUtil.parse(param.getBeginTime())),
DateUtil.endOfDay(DateUtil.parse(param.getEndTime())));
DateUtil.beginOfDay(DateUtil.parse(param.getTime())),
DateUtil.endOfDay(DateUtil.parse(param.getTime())));
Map<String, List<AlarmPO>> lineIntegrityMap = lineIntegritys.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId));
List<AlarmPO> lineAlarms = deviceAbnormaStatisticsMapper.getAlarmByLines(
monotorIds,
devIds,
DateUtil.beginOfDay(DateUtil.parse(param.getBeginTime())),
DateUtil.endOfDay(DateUtil.parse(param.getEndTime())));
DateUtil.beginOfDay(DateUtil.parse(param.getTime())),
DateUtil.endOfDay(DateUtil.parse(param.getTime())));
Map<String, List<AlarmPO>> lineAlarmsMap = lineAlarms.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId));
// 获取设备流量
List<AlarmPO> deviceFlowAndOnlineRate = deviceAbnormaStatisticsMapper.getFlowAndOnlineRateByDevice(
devIds,
DateUtil.beginOfDay(DateUtil.parse(param.getBeginTime())),
DateUtil.endOfDay(DateUtil.parse(param.getEndTime())));
DateUtil.beginOfDay(DateUtil.parse(param.getTime())),
DateUtil.endOfDay(DateUtil.parse(param.getTime())));
if (CollectionUtil.isNotEmpty(deviceFlowAndOnlineRate)) {
deviceFlowAndOnlineRateMap = deviceFlowAndOnlineRate.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId));
}
// 获取通信中断信息
// List<String> list = Arrays.asList("025fa0e4c91f72ad7f1c1bd29026f20a");
List<TopMsgPO> comMsgs = getCommunicate(devIds, param.getBeginTime(), param.getEndTime());
List<TopMsgPO> comMsgs = getCommunicate(devIds, param.getTime(), param.getTime());
if (CollectionUtil.isNotEmpty(comMsgs)) {
comMap = comMsgs.stream().collect(Collectors.groupingBy(TopMsgPO::getDevId));
}
@@ -131,11 +131,11 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist
} else {
topMsg.setOfftimeFlag(0);
String updateTime = localDateTimeFormat(alarmEntry.getValue().get(0).getUpdateTime());
long time = DateUtil.endOfDay(DateUtil.parse(param.getEndTime())).getTime() -
long time = DateUtil.endOfDay(DateUtil.parse(param.getTime())).getTime() -
alarmEntry.getValue().get(0).getUpdateTime().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
topMsg.setOfftimeValue((int)(time/1000/60));
topMsg.setComOutCount(1);
topMsg.setComOutDescription(updateTime+""+DateUtil.endOfDay(DateUtil.parse(param.getEndTime())));
topMsg.setComOutDescription(updateTime+""+DateUtil.endOfDay(DateUtil.parse(param.getTime())));
}
if (topMsg.getFlowFlag() != 1 || topMsg.getIntegrityFlag() != 1 || topMsg.getOfftimeFlag() != 0
|| topMsg.getAlarmCountFlag() != 1 || topMsg.getOnlineRateFlag() != 1) {

View File

@@ -16,8 +16,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
@MapperScan("com.njcn.**.mapper")
@EnableFeignClients(basePackages = "com.njcn")
@SpringBootApplication(scanBasePackages = "com.njcn")
public class
UserBootApplication {
public class UserBootApplication {
public static void main(String[] args) {
SpringApplication.run(UserBootApplication.class, args);