gasWellWatch/src/main/java/com/isu/gaswellwatch/service/impl/SummaryServiceImpl.java

112 lines
4.4 KiB
Java
Raw Normal View History

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;
import com.isu.gaswellwatch.vo.DeviceVO;
import com.isu.gaswellwatch.vo.summary.PieDataVO;
import com.isu.gaswellwatch.vo.summary.PieSummaryVO;
import jakarta.annotation.Resource;
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)
public class SummaryServiceImpl implements SummaryService {
@Resource(name = "stringRedisTemplate")
private RedisTemplate redisTemplate;
@Resource
private DeviceService deviceService;
@Override
public List<PieSummaryVO> getIndexPieSummary() {
2024-11-28 10:14:57 +08:00
Map<String,String> onlineMap = redisTemplate.opsForHash().entries(ONLINE_DEVICE_CACHE);
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-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;
for(DeviceVO deviceVO : deviceVOList){
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;
}
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);
}
}