| 
					
				 | 
			
			
				@@ -5,19 +5,26 @@ import com.ruoyi.ems.domain.Area; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.domain.AreaBuilding; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.domain.AreaBuildingZoning; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.domain.EmsDevice; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ruoyi.ems.domain.EmsFacs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.domain.common.AreaTier; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.domain.vo.QueryDevice; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ruoyi.ems.domain.vo.TreeEntity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.mapper.EmsDeviceMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.service.IAreaBuildingService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.service.IAreaBuildingZoningService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.service.IAreaService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ruoyi.ems.service.IEmsDeviceService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ruoyi.ems.service.IEmsFacsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.collections4.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.function.Function; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 能源设备Service业务层处理 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,6 +46,9 @@ public class EmsDeviceServiceImpl implements IEmsDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private IAreaBuildingZoningService zoningService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IEmsFacsService facsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 查询能源设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -56,6 +66,17 @@ public class EmsDeviceServiceImpl implements IEmsDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return emsDevice; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public EmsDevice selectByCode(String code) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        EmsDevice emsDevice = emsDeviceMapper.selectEmsDeviceByCode(code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (null != emsDevice) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fillAreaName(emsDevice); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return emsDevice; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 查询能源设备列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -95,6 +116,106 @@ public class EmsDeviceServiceImpl implements IEmsDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 根据设施获取设备树结构 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param areaCode 区域编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 设备树结构 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<TreeEntity> getTreeByFacs(String areaCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TreeEntity> retList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Area> areas = areaService.selectAreaList(new Area()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AreaBuilding> buildings = buildingService.selectAreaBuildingList(new AreaBuilding()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AreaBuildingZoning> zonings = zoningService.selectAreaBuildingZoningList(new AreaBuildingZoning()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isEmpty(areaCode)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isNotEmpty(areas)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (Area area : areas) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<EmsFacs> facsList = facsService.selectFacsByArea(area.getAreaCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    TreeEntity entity = new TreeEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    entity.setId("-1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    entity.setLabel(area.getAreaName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    entity.setChildren(buildFacsDevSub(facsList, areas, buildings, zonings)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    entity.setTier("Area"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    retList.add(entity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Area area = areaService.selectAreaByCode(areaCode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (null != area) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<EmsFacs> facsList = facsService.selectFacsByArea(area.getAreaCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                TreeEntity entity = new TreeEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setId("-1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setLabel(area.getAreaName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setChildren(buildFacsDevSub(facsList, areas, buildings, zonings)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setTier("Area"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                retList.add(entity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return retList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private List<TreeEntity> buildFacsDevSub(List<EmsFacs> facsList, List<Area> areas, List<AreaBuilding> buildings, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AreaBuildingZoning> zonings) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TreeEntity> retList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Area> areaMap = areas.stream().collect(Collectors.toMap(Area::getAreaCode, Function.identity())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, AreaBuilding> buildingMap = buildings.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .collect(Collectors.toMap(AreaBuilding::getBldgCode, Function.identity())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, AreaBuildingZoning> zoningMap = zonings.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            .collect(Collectors.toMap(AreaBuildingZoning::getZoningCode, Function.identity())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (EmsFacs facs : facsList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            boolean hasSub = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<TreeEntity> subList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            EmsDevice param = new EmsDevice(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setRefFacs(facs.getFacsCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<EmsDevice> devices = emsDeviceMapper.selectEmsDeviceList(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (EmsDevice device : devices) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                hasSub = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String namePrefix = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (StringUtils.equals(AreaTier.Area.name(), device.getAreaType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    namePrefix = areaMap.get(device.getRefArea()).getAreaName() + " "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (StringUtils.equals(AreaTier.Building.name(), device.getAreaType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    namePrefix = buildingMap.get(device.getRefArea()).getBldgName() + " "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (StringUtils.equals(AreaTier.Zoning.name(), device.getAreaType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    namePrefix = zoningMap.get(device.getRefArea()).getZoningName() + " "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String label = StringUtils.isNotBlank(namePrefix) ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    namePrefix + device.getDeviceName() : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    device.getDeviceName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                TreeEntity entity = new TreeEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setId(device.getDeviceCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setLabel(label); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setTier("Device"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                subList.add(entity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TreeEntity entity = new TreeEntity(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setId("-1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setLabel(facs.getFacsName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setTier("Facs"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setChildren(subList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (hasSub) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                retList.add(entity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return retList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 新增能源设备 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param emsDevice 能源设备 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -143,15 +264,48 @@ public class EmsDeviceServiceImpl implements IEmsDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private void fillAreaName(EmsDevice emsDevice) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (StringUtils.equals(emsDevice.getAreaType(), AreaTier.Area.name())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Area area = areaService.selectAreaByCode(emsDevice.getRefArea()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            emsDevice.setRefAreaName(area != null ? area.getAreaName() : "未知"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (null != area) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setRefAreaName(area.getAreaName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setAreaPath( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    null != area.getShortName() ? area.getShortName() : area.getAreaName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setRefAreaName("未知"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setAreaPath("未知/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else if (StringUtils.equals(emsDevice.getAreaType(), AreaTier.Building.name())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             AreaBuilding building = buildingService.selectAreaBuildingByCode(emsDevice.getRefArea()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            emsDevice.setRefAreaName(building != null ? building.getBldgName() : "未知"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (null != building) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setRefAreaName(building.getBldgName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setAreaPath(building.getAreaShortName() + "/" + building.getBldgName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setRefAreaName("未知"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setAreaPath("未知/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else if (StringUtils.equals(emsDevice.getAreaType(), AreaTier.Zoning.name())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             AreaBuildingZoning zoning = zoningService.selectAreaBuildingZoningByCode(emsDevice.getRefArea()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            emsDevice.setRefAreaName(zoning != null ? zoning.getZoningName() : "未知"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (null != zoning) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setRefAreaName(zoning.getZoningName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AreaBuilding building = buildingService.selectAreaBuildingByCode(zoning.getBldgCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (null != building) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    emsDevice.setAreaPath( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        building.getAreaShortName() + "/" + building.getBldgName() + "/" + zoning.getZoningName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    emsDevice.setAreaPath("未知/"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                emsDevice.setRefAreaName("未知"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |