110 lines
4.3 KiB
Java
110 lines
4.3 KiB
Java
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() {
|
|
// Map<String,String> onlineMap = redisTemplate.opsForHash().entries(ONLINE_DEVICE_CACHE);
|
|
//TODO 记得改回从缓存里取值
|
|
Map<String,String> onlineMap = new HashMap<>();
|
|
onlineMap.put("1","true");
|
|
onlineMap.put("2","false");
|
|
onlineMap.put("3","true");
|
|
onlineMap.put("4","true");
|
|
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 {
|
|
deviceGroup.put(deviceVO.getProduct().getCode(),List.of(deviceVO));
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|