2024-11-28 01:30:00 +08:00
|
|
|
|
package com.isu.gaswellwatch.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.isu.gaswellwatch.service.DeviceService;
|
|
|
|
|
import com.isu.gaswellwatch.service.SummaryService;
|
2024-12-10 21:17:08 +08:00
|
|
|
|
import com.isu.gaswellwatch.vo.DeviceHistoryVO;
|
2024-11-28 01:30:00 +08:00
|
|
|
|
import com.isu.gaswellwatch.vo.DeviceVO;
|
2024-12-11 17:55:13 +08:00
|
|
|
|
import com.isu.gaswellwatch.vo.summary.*;
|
2024-11-28 01:30:00 +08:00
|
|
|
|
import jakarta.annotation.Resource;
|
2024-12-06 10:06:04 +08:00
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
2024-12-10 21:17:08 +08:00
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
2024-12-06 10:06:04 +08:00
|
|
|
|
import org.springframework.data.redis.RedisConnectionFailureException;
|
2024-11-28 01:30:00 +08:00
|
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
import static com.isu.gaswellwatch.modbus.data.PersistenceHandler.*;
|
|
|
|
|
|
|
|
|
|
@Service("summaryService")
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
2024-12-06 10:06:04 +08:00
|
|
|
|
@Slf4j
|
2024-11-28 01:30:00 +08:00
|
|
|
|
public class SummaryServiceImpl implements SummaryService {
|
|
|
|
|
|
|
|
|
|
@Resource(name = "stringRedisTemplate")
|
|
|
|
|
private RedisTemplate redisTemplate;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private DeviceService deviceService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<PieSummaryVO> getIndexPieSummary() {
|
2024-12-06 10:06:04 +08:00
|
|
|
|
Map<String,String> onlineMap = new HashMap<>();
|
|
|
|
|
try{
|
|
|
|
|
onlineMap = redisTemplate.opsForHash().entries(ONLINE_DEVICE_CACHE);
|
|
|
|
|
}catch (RedisConnectionFailureException e){
|
|
|
|
|
log.error("获取在线设备缓存失败",e);
|
|
|
|
|
return getPieSummaryVOS();
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-28 01:30:00 +08:00
|
|
|
|
//TODO 记得改回从缓存里取值
|
2024-11-28 10:14:57 +08:00
|
|
|
|
// Map<String,String> onlineMap = new HashMap<>();
|
|
|
|
|
// onlineMap.put("1","true");
|
|
|
|
|
// onlineMap.put("2","false");
|
|
|
|
|
// onlineMap.put("3","true");
|
|
|
|
|
// onlineMap.put("4","true");
|
2024-12-01 15:26:37 +08:00
|
|
|
|
if(onlineMap.isEmpty()){
|
2024-12-06 10:06:04 +08:00
|
|
|
|
return getPieSummaryVOS();
|
2024-12-01 15:26:37 +08:00
|
|
|
|
}
|
2024-11-28 01:30:00 +08:00
|
|
|
|
List<Long> deviceIdList = onlineMap.keySet().stream().map(Long::parseLong).toList();
|
|
|
|
|
|
|
|
|
|
List<DeviceVO> deviceVOList = deviceService.getDeviceVOByIds(deviceIdList);
|
|
|
|
|
|
|
|
|
|
//将所有设备按不同的设备品牌进行分组
|
|
|
|
|
Map<String,List<DeviceVO>> deviceGroup = new HashMap<>();
|
|
|
|
|
for (DeviceVO deviceVO : deviceVOList) {
|
|
|
|
|
if(deviceGroup.containsKey(deviceVO.getProduct().getCode())){
|
|
|
|
|
deviceGroup.get(deviceVO.getProduct().getCode()).add(deviceVO);
|
|
|
|
|
}else {
|
2024-11-28 03:12:34 +08:00
|
|
|
|
List<DeviceVO> deviceVOList1 = new ArrayList<>();
|
|
|
|
|
deviceVOList1.add(deviceVO);
|
|
|
|
|
deviceGroup.put(deviceVO.getProduct().getCode(), deviceVOList1);
|
2024-11-28 01:30:00 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<PieSummaryVO> pieSummaryVOList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
addKNPCDeviceSummary(KNPCV1_MODBUS_TYPE,deviceGroup, onlineMap, pieSummaryVOList,"KNPCV1");
|
|
|
|
|
addKNPCDeviceSummary(ETC_MODBUS_TYPE,deviceGroup, onlineMap, pieSummaryVOList,"ETC");
|
|
|
|
|
addKNPCDeviceSummary(SCSS_MODBUS_TYPE,deviceGroup, onlineMap, pieSummaryVOList,"四川双晟");
|
|
|
|
|
|
|
|
|
|
//计算总数
|
|
|
|
|
PieSummaryVO pieSummaryVO = new PieSummaryVO();
|
|
|
|
|
pieSummaryVO.setChartName("total");
|
|
|
|
|
pieSummaryVO.setTitle("设备总数");
|
|
|
|
|
|
|
|
|
|
Integer onLineCount = 0;
|
|
|
|
|
Integer offLineCount = 0;
|
2024-12-27 15:24:41 +08:00
|
|
|
|
|
|
|
|
|
List<DeviceVO> allDeviceVOList = deviceService.getDeviceVOByIds(null);
|
|
|
|
|
|
|
|
|
|
for(DeviceVO deviceVO : allDeviceVOList){
|
2024-11-28 01:30:00 +08:00
|
|
|
|
if("true".equalsIgnoreCase(onlineMap.get(deviceVO.getId().toString()))){
|
|
|
|
|
onLineCount++;
|
|
|
|
|
}else {
|
|
|
|
|
offLineCount++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
PieDataVO onlinePieDataVO = new PieDataVO("在线",onLineCount);
|
|
|
|
|
PieDataVO offlinePieDataVO = new PieDataVO("离线",offLineCount);
|
|
|
|
|
pieSummaryVO.setData(List.of(onlinePieDataVO,offlinePieDataVO));
|
|
|
|
|
|
|
|
|
|
pieSummaryVOList.add(pieSummaryVO);
|
|
|
|
|
|
|
|
|
|
return pieSummaryVOList;
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-10 21:17:08 +08:00
|
|
|
|
@Override
|
|
|
|
|
public LineSummaryVO getPressureChartData(String startTime, String endTime, Long deviceId) {
|
|
|
|
|
//根据设备ID、时间范围查询设备历史数据表的油压 套压
|
|
|
|
|
DeviceVO deviceVO = deviceService.getDevice(deviceId);
|
|
|
|
|
if(deviceVO == null){
|
|
|
|
|
throw new RuntimeException("设备不存在");
|
|
|
|
|
}
|
|
|
|
|
List<String> xAxisData = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
List<DeviceHistoryVO> dataList = deviceService.getPressureChartData(deviceId,startTime,endTime);
|
|
|
|
|
//将查询到的结果组装成LineSummaryVO返回给前端
|
|
|
|
|
LineSummaryVO lineSummaryVO = new LineSummaryVO();
|
|
|
|
|
lineSummaryVO.setTitle(deviceVO.getGasWell().getName());
|
|
|
|
|
|
|
|
|
|
//设置图例数据
|
|
|
|
|
List<String> legendData = new ArrayList<>();
|
|
|
|
|
legendData.add("油压");
|
|
|
|
|
legendData.add("套压");
|
2024-12-11 17:55:13 +08:00
|
|
|
|
legendData.add("输压");
|
2024-12-10 21:17:08 +08:00
|
|
|
|
lineSummaryVO.setLegendData(legendData);
|
|
|
|
|
|
|
|
|
|
List<String> oilPressureData = new ArrayList<>();
|
|
|
|
|
List<String> casPressureData = new ArrayList<>();
|
2024-12-11 17:55:13 +08:00
|
|
|
|
List<String> prePressureData = new ArrayList<>();
|
2024-12-10 21:17:08 +08:00
|
|
|
|
|
|
|
|
|
for(DeviceHistoryVO deviceHistoryVO : dataList){
|
|
|
|
|
xAxisData.add(deviceHistoryVO.getCollectionTime());
|
|
|
|
|
oilPressureData.add(StringUtils.isEmpty(deviceHistoryVO.getOilPressure())?"0":deviceHistoryVO.getOilPressure());
|
|
|
|
|
casPressureData.add(StringUtils.isEmpty(deviceHistoryVO.getCasPressure())?"0":deviceHistoryVO.getCasPressure());
|
2024-12-11 17:55:13 +08:00
|
|
|
|
prePressureData.add(StringUtils.isEmpty(deviceHistoryVO.getPrePressure())?"0":deviceHistoryVO.getPrePressure());
|
2024-12-10 21:17:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//设置x轴数据(日期)
|
|
|
|
|
lineSummaryVO.setXAxisData(xAxisData);
|
|
|
|
|
|
|
|
|
|
//设置y轴数据(油压、套压)
|
|
|
|
|
List<LineDataVO> series = new ArrayList<>();
|
|
|
|
|
LineDataVO oil = new LineDataVO();
|
|
|
|
|
oil.setName("油压");
|
|
|
|
|
oil.setType("line");
|
|
|
|
|
oil.setData(oilPressureData);
|
|
|
|
|
|
2024-12-11 17:55:13 +08:00
|
|
|
|
//设置线条颜色 #A50021 深红 #333399 深蓝
|
|
|
|
|
ItemStyleVO itemStyleVO = new ItemStyleVO();
|
|
|
|
|
NormalStyleVO normalStyleVO = new NormalStyleVO();
|
|
|
|
|
normalStyleVO.setColor("#A50021");
|
|
|
|
|
LineStyleVO lineStyleVO = new LineStyleVO();
|
|
|
|
|
lineStyleVO.setColor("#A50021");
|
|
|
|
|
normalStyleVO.setLineStyle(lineStyleVO);
|
|
|
|
|
itemStyleVO.setNormal(normalStyleVO);
|
|
|
|
|
oil.setItemStyle(itemStyleVO);
|
|
|
|
|
|
2024-12-10 21:17:08 +08:00
|
|
|
|
LineDataVO cas = new LineDataVO();
|
|
|
|
|
cas.setName("套压");
|
|
|
|
|
cas.setType("line");
|
|
|
|
|
cas.setData(casPressureData);
|
|
|
|
|
|
2024-12-11 17:55:13 +08:00
|
|
|
|
//设置线条颜色
|
|
|
|
|
ItemStyleVO itemStyleVO1 = new ItemStyleVO();
|
|
|
|
|
NormalStyleVO normalStyleVO1 = new NormalStyleVO();
|
|
|
|
|
normalStyleVO1.setColor("#333399");
|
|
|
|
|
LineStyleVO lineStyleVO1 = new LineStyleVO();
|
|
|
|
|
lineStyleVO1.setColor("#333399");
|
2024-12-11 18:16:15 +08:00
|
|
|
|
normalStyleVO1.setLineStyle(lineStyleVO1);
|
2024-12-11 17:55:13 +08:00
|
|
|
|
itemStyleVO1.setNormal(normalStyleVO1);
|
|
|
|
|
cas.setItemStyle(itemStyleVO1);
|
|
|
|
|
|
|
|
|
|
LineDataVO pre = new LineDataVO();
|
|
|
|
|
pre.setName("输压");
|
|
|
|
|
pre.setType("line");
|
|
|
|
|
pre.setData(prePressureData);
|
|
|
|
|
|
|
|
|
|
|
2024-12-10 21:17:08 +08:00
|
|
|
|
series.add(oil);
|
|
|
|
|
series.add(cas);
|
2024-12-11 17:55:13 +08:00
|
|
|
|
series.add(pre);
|
2024-12-10 21:17:08 +08:00
|
|
|
|
|
|
|
|
|
lineSummaryVO.setSeries(series);
|
|
|
|
|
return lineSummaryVO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public LineSummaryVO getSwitchChartData(String startTime, String endTime, Long deviceId) {
|
|
|
|
|
DeviceVO deviceVO = deviceService.getDevice(deviceId);
|
|
|
|
|
if(deviceVO == null){
|
|
|
|
|
throw new RuntimeException("设备不存在");
|
|
|
|
|
}
|
|
|
|
|
List<String> xAxisData = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
List<DeviceHistoryVO> dataList = deviceService.getSwitchStatusData(deviceId,startTime,endTime,deviceVO.getProduct().getCode());
|
|
|
|
|
LineSummaryVO lineSummaryVO = new LineSummaryVO();
|
|
|
|
|
lineSummaryVO.setTitle(deviceVO.getGasWell().getName());
|
|
|
|
|
|
|
|
|
|
//设置图例数据
|
|
|
|
|
List<String> legendData = new ArrayList<>();
|
|
|
|
|
legendData.add("开关状态");
|
|
|
|
|
lineSummaryVO.setLegendData(legendData);
|
|
|
|
|
|
|
|
|
|
List<String> switchStatusData = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
for(DeviceHistoryVO deviceHistoryVO : dataList){
|
|
|
|
|
xAxisData.add(deviceHistoryVO.getCollectionTime());
|
|
|
|
|
switchStatusData.add(StringUtils.isEmpty(deviceHistoryVO.getWellStatus())?"0":deviceHistoryVO.getWellStatus());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//设置x轴数据(日期)
|
|
|
|
|
lineSummaryVO.setXAxisData(xAxisData);
|
|
|
|
|
|
|
|
|
|
//设置y轴数据(开关状态)
|
|
|
|
|
List<LineDataVO> series = new ArrayList<>();
|
|
|
|
|
LineDataVO status = new LineDataVO();
|
|
|
|
|
status.setName("开关状态");
|
|
|
|
|
status.setType("line");
|
|
|
|
|
status.setData(switchStatusData);
|
|
|
|
|
series.add(status);
|
|
|
|
|
lineSummaryVO.setSeries(series);
|
|
|
|
|
return lineSummaryVO;
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-06 10:06:04 +08:00
|
|
|
|
private static List<PieSummaryVO> getPieSummaryVOS() {
|
|
|
|
|
List<PieSummaryVO> result = new ArrayList<>();
|
|
|
|
|
PieSummaryVO pieSummaryVO = new PieSummaryVO();
|
|
|
|
|
pieSummaryVO.setChartName("total");
|
|
|
|
|
pieSummaryVO.setTitle("设备总数");
|
|
|
|
|
pieSummaryVO.setData(List.of());
|
|
|
|
|
result.add(pieSummaryVO);
|
|
|
|
|
|
|
|
|
|
PieSummaryVO pieSummaryVO1 = new PieSummaryVO();
|
|
|
|
|
pieSummaryVO1.setChartName(KNPCV1_MODBUS_TYPE);
|
|
|
|
|
pieSummaryVO1.setTitle("KNPCV1");
|
|
|
|
|
pieSummaryVO1.setData(List.of());
|
|
|
|
|
result.add(pieSummaryVO1);
|
|
|
|
|
|
|
|
|
|
PieSummaryVO pieSummaryVO2 = new PieSummaryVO();
|
|
|
|
|
pieSummaryVO2.setChartName(ETC_MODBUS_TYPE);
|
|
|
|
|
pieSummaryVO2.setTitle("ETC");
|
|
|
|
|
pieSummaryVO2.setData(List.of());
|
|
|
|
|
result.add(pieSummaryVO2);
|
|
|
|
|
|
|
|
|
|
PieSummaryVO pieSummaryVO3 = new PieSummaryVO();
|
|
|
|
|
pieSummaryVO3.setChartName(SCSS_MODBUS_TYPE);
|
|
|
|
|
pieSummaryVO3.setTitle("四川双晟");
|
|
|
|
|
pieSummaryVO3.setData(List.of());
|
|
|
|
|
result.add(pieSummaryVO3);
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-28 01:30:00 +08:00
|
|
|
|
private static void addKNPCDeviceSummary(String productName, Map<String, List<DeviceVO>> deviceGroup, Map<String, String> onlineMap, List<PieSummaryVO> pieSummaryVOList, String title) {
|
|
|
|
|
List<DeviceVO> knpcDeviceList = deviceGroup.get(productName);
|
|
|
|
|
PieSummaryVO pieSummaryVO = new PieSummaryVO();
|
|
|
|
|
pieSummaryVO.setChartName(productName);
|
|
|
|
|
pieSummaryVO.setTitle(title);
|
|
|
|
|
if(knpcDeviceList != null){
|
|
|
|
|
//根据设备列表查找在线map中的状态进行统计在线数量
|
|
|
|
|
Integer onLineCount = 0;
|
|
|
|
|
Integer offLineCount = 0;
|
|
|
|
|
for(DeviceVO deviceVO : knpcDeviceList){
|
|
|
|
|
if("true".equalsIgnoreCase(onlineMap.get(deviceVO.getId().toString()))){
|
|
|
|
|
onLineCount++;
|
|
|
|
|
}else {
|
|
|
|
|
offLineCount++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
PieDataVO onlinePieDataVO = new PieDataVO("在线",onLineCount);
|
|
|
|
|
PieDataVO offlinePieDataVO = new PieDataVO("离线",offLineCount);
|
|
|
|
|
pieSummaryVO.setData(List.of(onlinePieDataVO,offlinePieDataVO));
|
|
|
|
|
}else{
|
|
|
|
|
//无值时需要构建空值结构
|
|
|
|
|
pieSummaryVO.setData(new ArrayList<>());
|
|
|
|
|
}
|
|
|
|
|
pieSummaryVOList.add(pieSummaryVO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|