|  | @@ -69,6 +69,7 @@ import org.springframework.validation.annotation.Validated;
 | 
	
		
			
				|  |  |  import org.springframework.web.client.RestTemplate;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import javax.annotation.Resource;
 | 
	
		
			
				|  |  | +import java.math.BigDecimal;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.concurrent.atomic.AtomicReference;
 | 
	
		
			
				|  |  |  import java.util.regex.Matcher;
 | 
	
	
		
			
				|  | @@ -693,7 +694,10 @@ public class IotDeviceServiceImpl implements IotDeviceService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  // 根据设备id 运行记录模板属性名称 查询对应的 累计运行时长 累计运行公里数
 | 
	
		
			
				|  |  |                  if (CollUtil.isNotEmpty(multipleAttrDeviceIds) && CollUtil.isNotEmpty(multipleAttrNames)) {
 | 
	
		
			
				|  |  | +                    // 这里只查询了存在运行记录值的属性 todo 如果还没有记录运行记录数据 也要显示出来
 | 
	
		
			
				|  |  |                      List<IotDeviceRunLogRespVO> accumulatedData = iotDeviceRunLogMapper.multipleAccumulatedData(multipleAttrDeviceIds, multipleAttrNames);
 | 
	
		
			
				|  |  | +                    // key设备id  value设备对应的已经生成运行记录的多累计属性名称
 | 
	
		
			
				|  |  | +                    Map<Long, List<String>> loggedAttrNamePair = new HashMap<>();
 | 
	
		
			
				|  |  |                      // 组装每个设备对应的属性 累计时长 累计里程 集合
 | 
	
		
			
				|  |  |                      if (CollUtil.isNotEmpty(accumulatedData)) {
 | 
	
		
			
				|  |  |                          accumulatedData.forEach(data -> {
 | 
	
	
		
			
				|  | @@ -706,8 +710,49 @@ public class IotDeviceServiceImpl implements IotDeviceService {
 | 
	
		
			
				|  |  |                                  tempRunLogs.add(data);
 | 
	
		
			
				|  |  |                                  deviceRunLogPair.put(data.getDeviceId(), tempRunLogs);
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  | +                            // 组装每个设备的多累计属性名称集合
 | 
	
		
			
				|  |  | +                            if (loggedAttrNamePair.containsKey(data.getDeviceId())) {
 | 
	
		
			
				|  |  | +                                List<String> tempAttrNames = loggedAttrNamePair.get(data.getDeviceId());
 | 
	
		
			
				|  |  | +                                tempAttrNames.add(data.getPointName());
 | 
	
		
			
				|  |  | +                                loggedAttrNamePair.put(data.getDeviceId(), tempAttrNames);
 | 
	
		
			
				|  |  | +                            } else {
 | 
	
		
			
				|  |  | +                                List<String> tempAttrNames = new ArrayList<>();
 | 
	
		
			
				|  |  | +                                tempAttrNames.add(data.getPointName());
 | 
	
		
			
				|  |  | +                                loggedAttrNamePair.put(data.getDeviceId(), tempAttrNames);
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  |                          });
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | +                    // todo 如果还没有记录运行记录数据 也要显示出来
 | 
	
		
			
				|  |  | +                    deviceAttrsPair.forEach((deviceId, templateAttrs) -> {
 | 
	
		
			
				|  |  | +                        // 循环每个设备对应的多累计属性集合 找到没有生成运行记录的属性 使用空对象补全
 | 
	
		
			
				|  |  | +                        List<String> loggedAttrNames;
 | 
	
		
			
				|  |  | +                        if (loggedAttrNamePair.containsKey(deviceId)) {
 | 
	
		
			
				|  |  | +                            // 当前设备对应的已经生成运行记录的多累计属性名称集合
 | 
	
		
			
				|  |  | +                            loggedAttrNames = loggedAttrNamePair.get(deviceId);
 | 
	
		
			
				|  |  | +                        } else {
 | 
	
		
			
				|  |  | +                            loggedAttrNames = new ArrayList<>();
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        List<IotDeviceRunLogRespVO> loggedRunLogs;
 | 
	
		
			
				|  |  | +                        if (deviceRunLogPair.containsKey(deviceId)) {
 | 
	
		
			
				|  |  | +                            // 当前设备对应的已经生成运行记录的多累计属性名称集合
 | 
	
		
			
				|  |  | +                            loggedRunLogs = deviceRunLogPair.get(deviceId);
 | 
	
		
			
				|  |  | +                        } else {
 | 
	
		
			
				|  |  | +                            loggedRunLogs = new ArrayList<>();
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        // 组装没有生成运行记录的多累计属性集合
 | 
	
		
			
				|  |  | +                        templateAttrs.forEach(attr -> {
 | 
	
		
			
				|  |  | +                            // 找到没有生成运行记录的多累计属性
 | 
	
		
			
				|  |  | +                            if (!loggedAttrNames.contains(attr.getName())) {
 | 
	
		
			
				|  |  | +                                IotDeviceRunLogRespVO tempRunLog = new IotDeviceRunLogRespVO();
 | 
	
		
			
				|  |  | +                                tempRunLog.setDeviceId(deviceId);
 | 
	
		
			
				|  |  | +                                tempRunLog.setPointName(attr.getName());
 | 
	
		
			
				|  |  | +                                tempRunLog.setTotalMileage(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                                tempRunLog.setTotalRunTime(BigDecimal.ZERO);
 | 
	
		
			
				|  |  | +                                loggedRunLogs.add(tempRunLog);
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        });
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 |