| 
					
				 | 
			
			
				@@ -3,25 +3,19 @@ package com.ozs.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ozs.common.utils.AppendUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ozs.entity.BaseDeviceDynamicManagement; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ozs.entity.BaseRailwayManagement; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ozs.entity.CameraTree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ozs.entity.VehicleTree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ozs.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ozs.entity.vo.BaseCameraManagementDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ozs.entity.vo.BaseVehicleTerminalDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ozs.entity.vo.CameraTreeVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ozs.entity.vo.VehicleTreeVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ozs.mapper.BaseDeviceDynamicManagementMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.ozs.mapper.BaseRailwayManagementMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ozs.mapper.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ozs.service.BaseDeviceDynamicManagementService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ozs.service.VehiclePositionService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.util.ObjectUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,6 +33,15 @@ public class BaseDeviceDynamicManagementServiceImpl extends ServiceImpl<BaseDevi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     BaseRailwayManagementMapper railwayManagementMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    BaseTerminalMapper baseTerminalMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    VehiclePositionMapper vehiclePositionMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    BaseVehicleTerminalMapper baseVehicleTerminalMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    BaseVehicleMapper baseVehicleMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public CameraTree cameraTree(CameraTreeVo cameraTreeVo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -109,9 +112,6 @@ public class BaseDeviceDynamicManagementServiceImpl extends ServiceImpl<BaseDevi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public VehicleTree vehicleTree(VehicleTreeVo vehicleTreeVo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 线路 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LambdaQueryWrapper<BaseRailwayManagement> rp = new LambdaQueryWrapper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<BaseRailwayManagement> railwayList = railwayManagementMapper.selectList(rp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //1 父 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         VehicleTree vehicleTree = VehicleTree.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .name("机车树") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -120,62 +120,60 @@ public class BaseDeviceDynamicManagementServiceImpl extends ServiceImpl<BaseDevi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .children(new ArrayList<>()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Map<String, VehicleTree> map = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<BaseVehicleTerminalDto> list = baseDeviceDynamicManagementMapper.vehicleTreelist(vehicleTreeVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (list.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (BaseVehicleTerminalDto o : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 符合条件的终端行驶记录信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VehiclePosition> list = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 终端数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<BaseTerminal> baseTerminals = baseTerminalMapper.selectList(new LambdaQueryWrapper<>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!ObjectUtils.isEmpty(baseTerminals)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (BaseTerminal baseTerminal : baseTerminals) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 查询所有的终端在行驶记录表的最后一个数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                LambdaQueryWrapper<VehiclePosition> lambdaQueryWrapper = new LambdaQueryWrapper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                lambdaQueryWrapper.eq(VehiclePosition::getCreateTime, baseTerminal.getTerminalCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                lambdaQueryWrapper.orderByDesc(VehiclePosition::getId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<VehiclePosition> vehiclePositions = vehiclePositionMapper.selectList(lambdaQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (!ObjectUtils.isEmpty(vehiclePositions) && vehiclePositions.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    list.add(vehiclePositions.get(0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 线路 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<BaseRailwayManagement> railwayList = railwayManagementMapper.selectList(new LambdaQueryWrapper()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!ObjectUtils.isEmpty(railwayList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (BaseRailwayManagement baseRailwayManagement : railwayList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //  根据线路查询当前机车行驶 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 VehicleTree build = VehicleTree.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .code(o.getRailwayCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .flay(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .children(new ArrayList<>()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                for (BaseRailwayManagement railway : railwayList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (railway.getRailwayCode().equals(build.getCode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        build.setName(railway.getRailwayName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!vehicleTree.getChildren().stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .map(VehicleTree::getCode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .collect(Collectors.toList()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .contains(build.getCode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    vehicleTree.getChildren().add(build); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    map.put(o.getRailwayCode(), build); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 里程 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String mils = AppendUtils.stringAppend(o.getTravelMile()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                VehicleTree build1 = VehicleTree.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .code(mils + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .name(mils + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .code(baseRailwayManagement.getRailwayCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .name(baseRailwayManagement.getRailwayName()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .flay(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .mileage(o.getTravelMile()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .children(new ArrayList<>()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!ObjectUtils.isEmpty(map.get(o.getRailwayCode()))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    VehicleTree vehicleTree1 = map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (ObjectUtils.isEmpty(vehicleTree1)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        map.put(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行"), build1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        map.get(o.getRailwayCode()).getChildren().add(build1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (list.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<VehiclePosition> collect = list.stream().filter(vp -> vp.getRailwayCode().equals(baseRailwayManagement.getRailwayCode())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!ObjectUtils.isEmpty(collect)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        collect.sort((o1, o2) -> o1.getTravelMile().compareTo(o2.getTravelMile())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        List<VehicleTree> childrens = collect.stream().map(vp -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            LambdaQueryWrapper<BaseVehicle> lambdaQueryWrapper = new LambdaQueryWrapper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            lambdaQueryWrapper.eq(BaseVehicle::getVehicleCode, vp.getVehicleCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            BaseVehicle baseVehicle = baseVehicleMapper.selectOne(lambdaQueryWrapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            return VehicleTree.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    .code(vp.getTerminalCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    .name(AppendUtils.stringAppend(Integer.valueOf(vp.getTravelMile())) + "-" + (vp.getLineDir().equals("1") ? "上行" : "下行") + "-" + (ObjectUtils.isEmpty(baseVehicle) ? vp.getVehicleCode() : baseVehicle.getVehicleName())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    .flay(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    .children(new ArrayList<>()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        build.setChildren(childrens); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 摄像头 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                VehicleTree build2 = VehicleTree.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .code(o.getTerminalCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .name(o.getTerminalCode()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .flay(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .children(new ArrayList<>()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!ObjectUtils.isEmpty(map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    map.get(o.getTravelMile() + "-" + (o.getLineDir().equals("1") ? "上行" : "下行")).getChildren().add(build2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return vehicleTree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 |