lv.wenbin 11 сар өмнө
parent
commit
4f49e3e787
23 өөрчлөгдсөн 514 нэмэгдсэн , 93 устгасан
  1. 39 45
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/controller/DeviceController.java
  2. 14 1
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/Area.java
  3. 10 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/AreaBuilding.java
  4. 11 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/AreaBuildingZoning.java
  5. 11 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/EmsDevice.java
  6. 45 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/common/MeterObjType.java
  7. 8 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/mapper/AreaBuildingZoningMapper.java
  8. 7 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/mapper/EmsDeviceMapper.java
  9. 7 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/IAreaBuildingService.java
  10. 14 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/IAreaBuildingZoningService.java
  11. 15 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/IEmsDeviceService.java
  12. 8 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/IEmsFacsService.java
  13. 14 14
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/AreaBuildingServiceImpl.java
  14. 72 22
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/AreaBuildingZoningServiceImpl.java
  15. 157 3
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/EmsDeviceServiceImpl.java
  16. 18 0
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/EmsFacsServiceImpl.java
  17. 36 2
      ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/MeterDeviceServiceImpl.java
  18. 2 1
      ems-cloud/ems-modules/ems-server/src/main/resources/mapper/ems/AreaBuildingMapper.xml
  19. 4 0
      ems-cloud/ems-modules/ems-server/src/main/resources/mapper/ems/AreaBuildingZoningMapper.xml
  20. 6 1
      ems-cloud/ems-modules/ems-server/src/main/resources/mapper/ems/AreaMapper.xml
  21. 6 0
      ems-cloud/ems-modules/ems-server/src/main/resources/mapper/ems/EmsDeviceMapper.xml
  22. 7 2
      ems-cloud/ruoyi-gateway/src/main/resources/application-local.yml
  23. 3 2
      ems-cloud/sql/ems_server.sql

+ 39 - 45
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/controller/DeviceController.java

@@ -12,6 +12,7 @@ import com.ruoyi.ems.domain.AreaBuildingZoning;
 import com.ruoyi.ems.domain.EmsDevice;
 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.service.IAreaBuildingService;
 import com.ruoyi.ems.service.IAreaBuildingZoningService;
 import com.ruoyi.ems.service.IEmsDeviceService;
@@ -25,6 +26,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
@@ -34,14 +36,13 @@ import java.util.stream.Collectors;
 
 /**
  * 能源设备Controller
- * 
+ *
  * @author ruoyi
  * @date 2024-07-10
  */
 @RestController
 @RequestMapping("/device")
-public class DeviceController extends BaseController
-{
+public class DeviceController extends BaseController {
     @Autowired
     private IEmsDeviceService deviceService;
 
@@ -56,56 +57,43 @@ public class DeviceController extends BaseController
      */
     @RequiresPermissions("ems:device:list")
     @GetMapping("/list")
-    public TableDataInfo list(EmsDevice emsDevice)
-    {
+    public TableDataInfo list(EmsDevice emsDevice) {
         startPage();
         List<EmsDevice> list = deviceService.selectEmsDeviceList(emsDevice);
         return getDataTable(list);
     }
 
     /**
-     * 查询能源设备列表
+     * 递归查询 区域/建筑/区块 下的设备(分页)
      */
-    //@RequiresPermissions("basecfg:device:list")
-    @GetMapping("/listByAreaTree")
-    public TableDataInfo listByAreaTree(QueryDevice queryDevice)
-    {
-        // 层级为区域,需要查询下级建筑,以及建筑下级区块
+    @RequiresPermissions("basecfg:device:list")
+    @GetMapping("/listRecursionByArea")
+    public TableDataInfo listRecursionByArea(QueryDevice queryDevice) {
+        // 层级为区域 (建筑->区块)
         if (StringUtils.equals(queryDevice.getAreaType(), AreaTier.Area.name()) && StringUtils.isNotBlank(
             queryDevice.getRefArea())) {
-            AreaBuilding param = new AreaBuilding();
-            param.setAreaCode(queryDevice.getRefArea());
-            List<AreaBuilding> buildings = buildingService.selectAreaBuildingList(param);
+            List<AreaBuilding> buildings = buildingService.selectBuildingByAreaCode(queryDevice.getRefArea());
             List<String> buildingCodes = buildings.stream().map(AreaBuilding::getBldgCode).collect(Collectors.toList());
 
             if (CollectionUtils.isNotEmpty(buildings)) {
+                // 回填建筑codes
                 queryDevice.setBuildingCodes(buildingCodes);
-                List<String> zoningCodes = new ArrayList<>();
-
-                for (String buildCode : buildingCodes) {
-                    AreaBuildingZoning zParam = new AreaBuildingZoning();
-                    zParam.setBldgCode(buildCode);
-                    List<AreaBuildingZoning> list = zoningService.selectAreaBuildingZoningList(zParam);
-                    zoningCodes.addAll(
-                        list.stream().map(AreaBuildingZoning::getZoningCode).collect(Collectors.toList()));
-                }
-
-                if (CollectionUtils.isNotEmpty(zoningCodes)) {
-                    queryDevice.setZoningCodes(zoningCodes);
-                }
+
+                List<AreaBuildingZoning> zonings = zoningService.selectZoningByBuildings(buildingCodes);
+                List<String> zoningCodes = zonings.stream().map(AreaBuildingZoning::getZoningCode)
+                    .collect(Collectors.toList());
+                // 回填区块codes
+                queryDevice.setZoningCodes(CollectionUtils.isNotEmpty(zoningCodes) ? zoningCodes : null);
             }
         }
+        // 层级为建筑 (区块)
         else if (StringUtils.equals(queryDevice.getAreaType(), AreaTier.Building.name()) && StringUtils.isNotBlank(
             queryDevice.getRefArea())) {
-            AreaBuildingZoning zParam = new AreaBuildingZoning();
-            zParam.setBldgCode(queryDevice.getRefArea());
-            List<AreaBuildingZoning> list = zoningService.selectAreaBuildingZoningList(zParam);
+            List<AreaBuildingZoning> list = zoningService.selectZoningByBuilding(queryDevice.getRefArea());
             List<String> zoningCodes = list.stream().map(AreaBuildingZoning::getZoningCode)
                 .collect(Collectors.toList());
-
-            if (CollectionUtils.isNotEmpty(zoningCodes)) {
-                queryDevice.setZoningCodes(zoningCodes);
-            }
+            // 回填区块codes
+            queryDevice.setZoningCodes(CollectionUtils.isNotEmpty(zoningCodes) ? zoningCodes : null);
         }
 
         startPage();
@@ -114,13 +102,23 @@ public class DeviceController extends BaseController
     }
 
     /**
+     * 根据设施获取设备树结构
+     * @param areaCode 区域code
+     * @return 树结构
+     */
+    @RequiresPermissions("basecfg:device:list")
+    @GetMapping("/getTreeByFacs")
+    public AjaxResult getTreeByFacs(@RequestParam(value = "areaCode", required = false) String areaCode) {
+        return success(deviceService.getTreeByFacs(null));
+    }
+
+    /**
      * 导出能源设备列表
      */
     @RequiresPermissions("ems:device:export")
     @Log(title = "能源设备", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, EmsDevice emsDevice)
-    {
+    public void export(HttpServletResponse response, EmsDevice emsDevice) {
         List<EmsDevice> list = deviceService.selectEmsDeviceList(emsDevice);
         ExcelUtil<EmsDevice> util = new ExcelUtil<EmsDevice>(EmsDevice.class);
         util.exportExcel(response, list, "能源设备数据");
@@ -131,8 +129,7 @@ public class DeviceController extends BaseController
      */
     @RequiresPermissions("ems:device:query")
     @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return success(deviceService.selectEmsDeviceById(id));
     }
 
@@ -142,8 +139,7 @@ public class DeviceController extends BaseController
     @RequiresPermissions("ems:device:add")
     @Log(title = "能源设备", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody EmsDevice emsDevice)
-    {
+    public AjaxResult add(@RequestBody EmsDevice emsDevice) {
         return toAjax(deviceService.insertEmsDevice(emsDevice));
     }
 
@@ -153,8 +149,7 @@ public class DeviceController extends BaseController
     @RequiresPermissions("ems:device:edit")
     @Log(title = "能源设备", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody EmsDevice emsDevice)
-    {
+    public AjaxResult edit(@RequestBody EmsDevice emsDevice) {
         return toAjax(deviceService.updateEmsDevice(emsDevice));
     }
 
@@ -163,9 +158,8 @@ public class DeviceController extends BaseController
      */
     @RequiresPermissions("ems:device:remove")
     @Log(title = "能源设备", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(deviceService.deleteEmsDeviceByIds(ids));
     }
 }

+ 14 - 1
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/Area.java

@@ -28,6 +28,9 @@ public class Area extends BaseEntity
     @Excel(name = "服务区名称")
     private String areaName;
 
+    @Excel(name = "服务区简称")
+    private String shortName;
+
     /** 服务星级 */
     @Excel(name = "服务星级")
     private Long serviceStar;
@@ -104,7 +107,16 @@ public class Area extends BaseEntity
     {
         return areaName;
     }
-    public void setServiceStar(Long serviceStar) 
+
+    public String getShortName() {
+        return shortName;
+    }
+
+    public void setShortName(String shortName) {
+        this.shortName = shortName;
+    }
+
+    public void setServiceStar(Long serviceStar)
     {
         this.serviceStar = serviceStar;
     }
@@ -219,6 +231,7 @@ public class Area extends BaseEntity
             .append("id", getId())
             .append("areaCode", getAreaCode())
             .append("areaName", getAreaName())
+            .append("shortName", getShortName())
             .append("serviceStar", getServiceStar())
             .append("city", getCity())
             .append("highway", getHighway())

+ 10 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/AreaBuilding.java

@@ -56,6 +56,8 @@ public class AreaBuilding extends BaseEntity
     @Excel(name = "园区")
     private String areaName;
 
+    private String areaShortName;
+
     public void setId(Long id) 
     {
         this.id = id;
@@ -154,6 +156,14 @@ public class AreaBuilding extends BaseEntity
         this.areaName = areaName;
     }
 
+    public String getAreaShortName() {
+        return areaShortName;
+    }
+
+    public void setAreaShortName(String areaShortName) {
+        this.areaShortName = areaShortName;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 11 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/AreaBuildingZoning.java

@@ -51,6 +51,9 @@ public class AreaBuildingZoning extends BaseEntity
     /** 标签名称 */
     private String tagName;
 
+    /** 区域路径 **/
+    private String areaPath;
+
     public void setId(Long id) 
     {
         this.id = id;
@@ -139,6 +142,14 @@ public class AreaBuildingZoning extends BaseEntity
         this.tagName = tagName;
     }
 
+    public String getAreaPath() {
+        return areaPath;
+    }
+
+    public void setAreaPath(String areaPath) {
+        this.areaPath = areaPath;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 11 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/EmsDevice.java

@@ -54,6 +54,9 @@ public class EmsDevice extends BaseEntity
     @Excel(name = "归属设施")
     private String refFacsName;
 
+    /** 归属区域路径 */
+    private String areaPath;
+
     public void setId(Long id) 
     {
         this.id = id;
@@ -152,6 +155,14 @@ public class EmsDevice extends BaseEntity
         this.refFacsName = refFacsName;
     }
 
+    public String getAreaPath() {
+        return areaPath;
+    }
+
+    public void setAreaPath(String areaPath) {
+        this.areaPath = areaPath;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 45 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/domain/common/MeterObjType.java

@@ -0,0 +1,45 @@
+/*
+ * 文 件 名:  MeterObjType
+ * 版    权:  浩鲸云计算科技股份有限公司
+ * 描    述:  <描述>
+ * 修 改 人:  lvwenbin
+ * 修改时间:  2024/8/12
+ * 跟踪单号:  <跟踪单号>
+ * 修改单号:  <修改单号>
+ * 修改内容:  <修改内容>
+ */
+package com.ruoyi.ems.domain.common;
+
+/**
+ * 计量类型
+ * <功能详细描述>
+ *
+ * @author lvwenbin
+ * @version [版本号, 2024/8/12]
+ * @see [相关类/方法]
+ * @since [产品/模块版本]
+ */
+public enum MeterObjType {
+    /**
+     * 计量对象类型
+     */
+    METER_ZONING(1),
+    /**
+     * 计量对象类型
+     */
+    METER_DEV(2);
+
+    private int type;
+
+    MeterObjType(int type) {
+        this.type = type;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+}

+ 8 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/mapper/AreaBuildingZoningMapper.java

@@ -60,6 +60,14 @@ public interface AreaBuildingZoningMapper {
     int deleteAreaBuildingZoningById(Long id);
 
     /**
+     * 删除建筑区域划分
+     *
+     * @param code 建筑code
+     * @return 结果
+     */
+    int deleteAreaBuildingZoningByBuilding(String code);
+
+    /**
      * 批量删除建筑区域划分
      *
      * @param ids 需要删除的数据主键集合

+ 7 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/mapper/EmsDeviceMapper.java

@@ -21,6 +21,13 @@ public interface EmsDeviceMapper {
     EmsDevice selectEmsDeviceById(Long id);
 
     /**
+     * 查询能源设备
+     * @param code 能源设备编码
+     * @return 能源设备
+     */
+    EmsDevice selectEmsDeviceByCode(String code);
+
+    /**
      * 查询能源设备列表
      *
      * @param emsDevice 能源设备

+ 7 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/IAreaBuildingService.java

@@ -36,6 +36,13 @@ public interface IAreaBuildingService {
     List<AreaBuilding> selectAreaBuildingList(AreaBuilding areaBuilding);
 
     /**
+     * 查询区域下的建筑
+     * @param areaCode 区域编码
+     * @return 建筑列表
+     */
+    List<AreaBuilding> selectBuildingByAreaCode(String areaCode);
+
+    /**
      * 新增建筑基本信息
      *
      * @param areaBuilding 建筑基本信息

+ 14 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/IAreaBuildingZoningService.java

@@ -36,6 +36,20 @@ public interface IAreaBuildingZoningService {
     List<AreaBuildingZoning> selectAreaBuildingZoningList(AreaBuildingZoning areaBuildingZoning);
 
     /**
+     * 查询建筑区域下的分区
+     * @param buildingCode 建筑code集合
+     * @return 建筑区域划分集合
+     */
+    List<AreaBuildingZoning> selectZoningByBuilding(String buildingCode);
+
+    /**
+     * 查询建筑区域下的分区
+     * @param buildingCodes 建筑code集合
+     * @return 建筑区域划分集合
+     */
+    List<AreaBuildingZoning> selectZoningByBuildings(List<String> buildingCodes);
+
+    /**
      * 新增建筑区域划分
      *
      * @param areaBuildingZoning 建筑区域划分

+ 15 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/IEmsDeviceService.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.ruoyi.ems.domain.EmsDevice;
 import com.ruoyi.ems.domain.vo.QueryDevice;
+import com.ruoyi.ems.domain.vo.TreeEntity;
 
 /**
  * 能源设备Service接口
@@ -21,6 +22,13 @@ public interface IEmsDeviceService {
     EmsDevice selectEmsDeviceById(Long id);
 
     /**
+     * 查询能源设备
+     * @param code 设备编码
+     * @return 能源设备
+     */
+    EmsDevice selectByCode(String code);
+
+    /**
      * 查询能源设备列表
      *
      * @param queryDevice 能源设备
@@ -37,6 +45,13 @@ public interface IEmsDeviceService {
     List<EmsDevice> selectByAreaTree(QueryDevice emsDevice);
 
     /**
+     * 根据设施获取设备树结构
+     * @param areaCode 区域编码
+     * @return 设备树结构
+     */
+    List<TreeEntity> getTreeByFacs(String areaCode);
+
+    /**
      * 新增能源设备
      *
      * @param emsDevice 能源设备

+ 8 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/IEmsFacsService.java

@@ -19,6 +19,14 @@ public interface IEmsFacsService {
     EmsFacs selectEmsFacsById(Long id);
 
     /**
+     * 查询区域下的设施列表
+     *
+     * @param areaCode 区域代码
+     * @return 能源设施/系统集合
+     */
+    List<EmsFacs> selectFacsByArea(String areaCode);
+
+    /**
      * 查询能源设施/系统列表
      *
      * @param emsFacs 能源设施/系统

+ 14 - 14
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/AreaBuildingServiceImpl.java

@@ -1,14 +1,13 @@
 package com.ruoyi.ems.service.impl;
 
-import java.util.List;
-
-import com.ruoyi.ems.domain.AreaBuildingZoning;
+import com.ruoyi.ems.domain.AreaBuilding;
+import com.ruoyi.ems.mapper.AreaBuildingMapper;
+import com.ruoyi.ems.mapper.AreaBuildingZoningMapper;
 import com.ruoyi.ems.service.IAreaBuildingService;
-import com.ruoyi.ems.service.IAreaBuildingZoningService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.ems.mapper.AreaBuildingMapper;
-import com.ruoyi.ems.domain.AreaBuilding;
+
+import java.util.List;
 
 /**
  * 建筑基本信息Service业务层处理
@@ -22,7 +21,7 @@ public class AreaBuildingServiceImpl implements IAreaBuildingService {
     private AreaBuildingMapper areaBuildingMapper;
 
     @Autowired
-    private IAreaBuildingZoningService zoningService;
+    private AreaBuildingZoningMapper areaBuildingZoningMapper;
 
     /**
      * 查询建筑基本信息
@@ -57,6 +56,13 @@ public class AreaBuildingServiceImpl implements IAreaBuildingService {
         return areaBuildingMapper.selectAreaBuildingList(areaBuilding);
     }
 
+    @Override
+    public List<AreaBuilding> selectBuildingByAreaCode(String areaCode) {
+        AreaBuilding param = new AreaBuilding();
+        param.setAreaCode(areaCode);
+        return areaBuildingMapper.selectAreaBuildingList(param);
+    }
+
     /**
      * 新增建筑基本信息
      *
@@ -122,12 +128,6 @@ public class AreaBuildingServiceImpl implements IAreaBuildingService {
     }
 
     public void deleteRel(String bldgCode) {
-        AreaBuildingZoning zoningParam = new AreaBuildingZoning();
-        zoningParam.setBldgCode(bldgCode);
-        List<AreaBuildingZoning> zonings = zoningService.selectAreaBuildingZoningList(zoningParam);
-
-        for (AreaBuildingZoning zoning : zonings) {
-            zoningService.deleteAreaBuildingZoningById(zoning.getId());
-        }
+        areaBuildingZoningMapper.deleteAreaBuildingZoningByBuilding(bldgCode);
     }
 }

+ 72 - 22
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/AreaBuildingZoningServiceImpl.java

@@ -1,6 +1,15 @@
 package com.ruoyi.ems.service.impl;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import com.ruoyi.ems.domain.AreaBuilding;
+import com.ruoyi.ems.mapper.AreaBuildingMapper;
+import com.ruoyi.ems.service.IAreaBuildingService;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.ems.mapper.AreaBuildingZoningMapper;
@@ -9,25 +18,26 @@ import com.ruoyi.ems.service.IAreaBuildingZoningService;
 
 /**
  * 建筑区域划分Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2024-07-09
  */
 @Service
-public class AreaBuildingZoningServiceImpl implements IAreaBuildingZoningService
-{
+public class AreaBuildingZoningServiceImpl implements IAreaBuildingZoningService {
     @Autowired
     private AreaBuildingZoningMapper areaBuildingZoningMapper;
 
+    @Autowired
+    private AreaBuildingMapper areaBuildingMapper;
+
     /**
      * 查询建筑区域划分
-     * 
+     *
      * @param id 建筑区域划分主键
      * @return 建筑区域划分
      */
     @Override
-    public AreaBuildingZoning selectAreaBuildingZoningById(Long id)
-    {
+    public AreaBuildingZoning selectAreaBuildingZoningById(Long id) {
         return areaBuildingZoningMapper.selectAreaBuildingZoningById(id);
     }
 
@@ -44,61 +54,101 @@ public class AreaBuildingZoningServiceImpl implements IAreaBuildingZoningService
 
     /**
      * 查询建筑区域划分列表
-     * 
+     *
      * @param areaBuildingZoning 建筑区域划分
      * @return 建筑区域划分
      */
     @Override
-    public List<AreaBuildingZoning> selectAreaBuildingZoningList(AreaBuildingZoning areaBuildingZoning)
-    {
-        return areaBuildingZoningMapper.selectAreaBuildingZoningList(areaBuildingZoning);
+    public List<AreaBuildingZoning> selectAreaBuildingZoningList(AreaBuildingZoning areaBuildingZoning) {
+        List<AreaBuildingZoning> list = areaBuildingZoningMapper.selectAreaBuildingZoningList(areaBuildingZoning);
+        fillAreaPath(list);
+        return list;
+    }
+
+    @Override
+    public List<AreaBuildingZoning> selectZoningByBuilding(String buildingCode) {
+        AreaBuildingZoning zParam = new AreaBuildingZoning();
+        zParam.setBldgCode(buildingCode);
+        List<AreaBuildingZoning> list = areaBuildingZoningMapper.selectAreaBuildingZoningList(zParam);
+        fillAreaPath(list);
+        return list;
+    }
+
+    @Override
+    public List<AreaBuildingZoning> selectZoningByBuildings(List<String> buildingCodes) {
+        List<AreaBuildingZoning> retList = new ArrayList<>();
+
+        for (String buildCode : buildingCodes) {
+            AreaBuildingZoning zParam = new AreaBuildingZoning();
+            zParam.setBldgCode(buildCode);
+            List<AreaBuildingZoning> list = areaBuildingZoningMapper.selectAreaBuildingZoningList(zParam);
+            fillAreaPath(list);
+            retList.addAll(list);
+        }
+
+        return retList;
     }
 
     /**
      * 新增建筑区域划分
-     * 
+     *
      * @param areaBuildingZoning 建筑区域划分
      * @return 结果
      */
     @Override
-    public int insertAreaBuildingZoning(AreaBuildingZoning areaBuildingZoning)
-    {
+    public int insertAreaBuildingZoning(AreaBuildingZoning areaBuildingZoning) {
         return areaBuildingZoningMapper.insertAreaBuildingZoning(areaBuildingZoning);
     }
 
     /**
      * 修改建筑区域划分
-     * 
+     *
      * @param areaBuildingZoning 建筑区域划分
      * @return 结果
      */
     @Override
-    public int updateAreaBuildingZoning(AreaBuildingZoning areaBuildingZoning)
-    {
+    public int updateAreaBuildingZoning(AreaBuildingZoning areaBuildingZoning) {
         return areaBuildingZoningMapper.updateAreaBuildingZoning(areaBuildingZoning);
     }
 
     /**
      * 批量删除建筑区域划分
-     * 
+     *
      * @param ids 需要删除的建筑区域划分主键
      * @return 结果
      */
     @Override
-    public int deleteAreaBuildingZoningByIds(Long[] ids)
-    {
+    public int deleteAreaBuildingZoningByIds(Long[] ids) {
         return areaBuildingZoningMapper.deleteAreaBuildingZoningByIds(ids);
     }
 
     /**
      * 删除建筑区域划分信息
-     * 
+     *
      * @param id 建筑区域划分主键
      * @return 结果
      */
     @Override
-    public int deleteAreaBuildingZoningById(Long id)
-    {
+    public int deleteAreaBuildingZoningById(Long id) {
         return areaBuildingZoningMapper.deleteAreaBuildingZoningById(id);
     }
+
+    private void fillAreaPath(List<AreaBuildingZoning> list) {
+        if (CollectionUtils.isNotEmpty(list)) {
+            List<AreaBuilding> areaBuildings = areaBuildingMapper.selectAreaBuildingList(new AreaBuilding());
+            Map<String, AreaBuilding> areaBuildingsMap = areaBuildings.stream()
+                .collect(Collectors.toMap(AreaBuilding::getBldgCode, Function.identity()));
+
+            for (AreaBuildingZoning zoning : list) {
+                String areaName = null;
+                String buildingName = null;
+
+                AreaBuilding areaBuilding = areaBuildingsMap.get(zoning.getBldgCode());
+                areaName = areaBuilding != null ? areaBuilding.getAreaShortName() + "/" : "*/";
+                buildingName = zoning.getBldgName() != null ? zoning.getBldgName() : "*";
+
+                zoning.setAreaPath(areaName + buildingName);
+            }
+        }
+    }
 }

+ 157 - 3
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/EmsDeviceServiceImpl.java

@@ -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("未知");
+            }
         }
     }
 }

+ 18 - 0
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/EmsFacsServiceImpl.java

@@ -45,6 +45,24 @@ public class EmsFacsServiceImpl implements IEmsFacsService {
         return emsFacs;
     }
 
+    @Override
+    public List<EmsFacs> selectFacsByArea(String areaCode) {
+        EmsFacs param = new EmsFacs();
+        param.setRefArea(areaCode);
+
+        // 查询设施对象
+        List<EmsFacs> list = emsFacsMapper.selectEmsFacsList(param);
+
+        // 查询扩展属性
+        if (CollectionUtils.isNotEmpty(list)) {
+            list.forEach(facsObj -> {
+                facsObj.setFacsAttrs(getFacsAttrs(facsObj));
+            });
+        }
+
+        return list;
+    }
+
     /**
      * 查询能源设施/系统列表
      *

+ 36 - 2
ems-cloud/ems-modules/ems-server/src/main/java/com/ruoyi/ems/service/impl/MeterDeviceServiceImpl.java

@@ -1,8 +1,17 @@
 package com.ruoyi.ems.service.impl;
 
+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.MeterDevice;
+import com.ruoyi.ems.domain.common.AreaTier;
+import com.ruoyi.ems.domain.common.MeterObjType;
 import com.ruoyi.ems.mapper.MeterDeviceMapper;
+import com.ruoyi.ems.service.IAreaBuildingZoningService;
+import com.ruoyi.ems.service.IEmsDeviceService;
 import com.ruoyi.ems.service.IMeterDeviceService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -19,6 +28,12 @@ public class MeterDeviceServiceImpl implements IMeterDeviceService {
     @Autowired
     private MeterDeviceMapper meterDeviceMapper;
 
+    @Autowired
+    private IAreaBuildingZoningService zoningService;
+
+    @Autowired
+    private IEmsDeviceService deviceService;
+
     /**
      * 查询计量设备
      *
@@ -27,7 +42,9 @@ public class MeterDeviceServiceImpl implements IMeterDeviceService {
      */
     @Override
     public MeterDevice selectMeterDeviceById(Long id) {
-        return meterDeviceMapper.selectMeterDeviceById(id);
+        MeterDevice meterDevice = meterDeviceMapper.selectMeterDeviceById(id);
+        fillObjName(meterDevice);
+        return meterDevice;
     }
 
     /**
@@ -38,7 +55,13 @@ public class MeterDeviceServiceImpl implements IMeterDeviceService {
      */
     @Override
     public List<MeterDevice> selectMeterDeviceList(MeterDevice meterDevice) {
-        return meterDeviceMapper.selectMeterDeviceList(meterDevice);
+        List<MeterDevice> meterDevices = meterDeviceMapper.selectMeterDeviceList(meterDevice);
+
+        for (MeterDevice device : meterDevices) {
+            fillObjName(device);
+        }
+
+        return meterDevices;
     }
 
     /**
@@ -84,4 +107,15 @@ public class MeterDeviceServiceImpl implements IMeterDeviceService {
     public int deleteMeterDeviceById(Long id) {
         return meterDeviceMapper.deleteMeterDeviceById(id);
     }
+
+    private void fillObjName(MeterDevice meterDevice) {
+        if (MeterObjType.METER_ZONING.getType() == meterDevice.getObjType()) {
+            AreaBuildingZoning zoning = zoningService.selectAreaBuildingZoningByCode(meterDevice.getObjCode());
+            meterDevice.setObjName(zoning != null ? zoning.getZoningName() : "未知");
+        }
+        else if (MeterObjType.METER_DEV.getType() == meterDevice.getObjType()) {
+            EmsDevice device = deviceService.selectByCode(meterDevice.getObjCode());
+            meterDevice.setObjName(device != null ? device.getDeviceName() : "未知");
+        }
+    }
 }

+ 2 - 1
ems-cloud/ems-modules/ems-server/src/main/resources/mapper/ems/AreaBuildingMapper.xml

@@ -16,10 +16,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="bldgUsage"    column="bldg_usage"    />
         <result property="areaCode"    column="area_code"    />
         <result property="areaName"    column="area_name"    />
+        <result property="areaShortName"  column="area_short_name"    />
     </resultMap>
 
     <sql id="selectAreaBuildingVo">
-        select b.`id`, b.`bldg_code`, b.`bldg_name`, b.`address`, b.`up_bldg_floor`, b.`down_bldg_floor`, b.`bldg_height`, b.`floor_area`, b.`bldg_usage`, b.`area_code`, a.`area_name` from adm_area_building b LEFT JOIN adm_service_area a ON b.`area_code` = a.`area_code`
+        select b.`id`, b.`bldg_code`, b.`bldg_name`, b.`address`, b.`up_bldg_floor`, b.`down_bldg_floor`, b.`bldg_height`, b.`floor_area`, b.`bldg_usage`, b.`area_code`, a.`area_name`, a.`short_name` as area_short_name from adm_area_building b LEFT JOIN adm_service_area a ON b.`area_code` = a.`area_code`
     </sql>
 
     <select id="selectAreaBuildingList" parameterType="com.ruoyi.ems.domain.AreaBuilding" resultMap="AreaBuildingResult">

+ 4 - 0
ems-cloud/ems-modules/ems-server/src/main/resources/mapper/ems/AreaBuildingZoningMapper.xml

@@ -86,6 +86,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         delete from adm_area_building_zoning where id = #{id}
     </delete>
 
+    <delete id="deleteAreaBuildingZoningByBuilding" parameterType="java.lang.String">
+        delete from adm_area_building_zoning where bldg_code = #{code}
+    </delete>
+
     <delete id="deleteAreaBuildingZoningByIds" parameterType="String">
         delete from adm_area_building_zoning where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">

+ 6 - 1
ems-cloud/ems-modules/ems-server/src/main/resources/mapper/ems/AreaMapper.xml

@@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="id"    column="id"    />
         <result property="areaCode"    column="area_code"    />
         <result property="areaName"    column="area_name"    />
+        <result property="shortName"    column="short_name"    />
         <result property="serviceStar"    column="service_star"    />
         <result property="city"    column="city"    />
         <result property="highway"    column="highway"    />
@@ -23,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectAreaVo">
-        select id, area_code, area_name, service_star, city, highway, direction, address, attr_org, mgr_org, open_date, land_area, floor_area, longitude, latitude from adm_service_area
+        select id, area_code, area_name, short_name, service_star, city, highway, direction, address, attr_org, mgr_org, open_date, land_area, floor_area, longitude, latitude from adm_service_area
     </sql>
 
     <select id="selectAreaList" parameterType="com.ruoyi.ems.domain.Area" resultMap="AdmServiceAreaResult">
@@ -31,6 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>  
             <if test="areaCode != null  and areaCode != ''"> and area_code = #{areaCode}</if>
             <if test="areaName != null  and areaName != ''"> and area_name like concat('%', #{areaName}, '%')</if>
+            <if test="shortName != null  and shortName != ''"> and short_name like concat('%', #{shortName}, '%')</if>
             <if test="serviceStar != null "> and service_star = #{serviceStar}</if>
             <if test="city != null  and city != ''"> and city = #{city}</if>
             <if test="highway != null  and highway != ''"> and highway = #{highway}</if>
@@ -61,6 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="areaCode != null and areaCode != ''">area_code,</if>
             <if test="areaName != null and areaName != ''">area_name,</if>
+            <if test="shortName != null and shortName != ''">short_name,</if>
             <if test="serviceStar != null">service_star,</if>
             <if test="city != null">city,</if>
             <if test="highway != null">highway,</if>
@@ -77,6 +80,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="areaCode != null and areaCode != ''">#{areaCode},</if>
             <if test="areaName != null and areaName != ''">#{areaName},</if>
+            <if test="shortName != null and shortName != ''">#{shortName},</if>
             <if test="serviceStar != null">#{serviceStar},</if>
             <if test="city != null">#{city},</if>
             <if test="highway != null">#{highway},</if>
@@ -97,6 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <trim prefix="SET" suffixOverrides=",">
             <if test="areaCode != null and areaCode != ''">area_code = #{areaCode},</if>
             <if test="areaName != null and areaName != ''">area_name = #{areaName},</if>
+            <if test="shortName != null and shortName != ''">short_name = #{shortName},</if>
             <if test="serviceStar != null">service_star = #{serviceStar},</if>
             <if test="city != null">city = #{city},</if>
             <if test="highway != null">highway = #{highway},</if>

+ 6 - 0
ems-cloud/ems-modules/ems-server/src/main/resources/mapper/ems/EmsDeviceMapper.xml

@@ -40,6 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
     </select>
 
+    <!-- 递归查询 区域/建筑/区块 下的设备 -->
     <select id="selectByAreaTree" parameterType="com.ruoyi.ems.domain.vo.QueryDevice" resultMap="EmsDeviceResult">
         <include refid="selectEmsDeviceVo"/>
         <where>
@@ -82,6 +83,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectEmsDeviceVo"/>
         where d.`id` = #{id}
     </select>
+
+    <select id="selectEmsDeviceByCode" parameterType="java.lang.String" resultMap="EmsDeviceResult">
+        <include refid="selectEmsDeviceVo"/>
+        where d.`device_code` = #{code}
+    </select>
         
     <insert id="insertEmsDevice" parameterType="com.ruoyi.ems.domain.EmsDevice" useGeneratedKeys="true" keyProperty="id">
         insert into adm_ems_device

+ 7 - 2
ems-cloud/ruoyi-gateway/src/main/resources/application-local.yml

@@ -39,8 +39,13 @@ spring:
           predicates:
             - Path=/74/ems/**
           filters:
-            - StripPrefix=0
-            - RewritePath=/74/ems/(?<segment>.*), /ems/${segment}
+            - StripPrefix=1
+        - id: ems-server-78
+          uri: http://172.192.13.78:9202
+          predicates:
+            - Path=/78/ems/**
+          filters:
+            - StripPrefix=1
         # 定时任务
         - id: ruoyi-job
           uri: lb://ruoyi-job

+ 3 - 2
ems-cloud/sql/ems_server.sql

@@ -365,6 +365,7 @@ create table adm_service_area (
   `id`             bigint(20)      not null auto_increment    comment '序号',
   `area_code`      varchar(32)     not null                   comment '服务区代码',
   `area_name`      varchar(32)     not null                   comment '服务区名称',
+  `short_name`     varchar(16)     default null               comment '简称',
   `service_star`   int             default null               comment '服务星级',
   `city`           varchar(16)     default null               comment '所在城市',
   `highway`        varchar(32)     default null               comment '所在高速',
@@ -382,8 +383,8 @@ create table adm_service_area (
 ) engine=innodb auto_increment=1 comment = '服务区表';
 
 -- 服务区初始数据
-INSERT INTO `adm_service_area` (`area_code`, `area_name`, `service_star`, `city`, `highway`, `direction`, `address`, `attr_org`, `mgr_org`, `open_date`, `land_area`, `floor_area`, `longitude`, `latitude`) VALUES ('321283124S3001', '常泰高速服务区(北区)', 4, '泰州', 'S30如常高速', '常州方向', '江苏省泰州市泰兴市虹桥镇常泰高速常州方向', null, null, '2025-01-01', '72.5', '6000', '120.050937', '32.071956');
-INSERT INTO `adm_service_area` (`area_code`, `area_name`, `service_star`, `city`, `highway`, `direction`, `address`, `attr_org`, `mgr_org`, `open_date`, `land_area`, `floor_area`, `longitude`, `latitude`) VALUES ('321283124S3002', '常泰高速服务区(南区)', 4, '泰州', 'S30如常高速', '泰兴方向', '江苏省泰州市泰兴市虹桥镇常泰高速泰州方向', null, null, '2025-01-01', '72.5', '6000', '120.052389', '32.070408');
+INSERT INTO `adm_service_area` (`area_code`, `area_name`, `short_name`, `service_star`, `city`, `highway`, `direction`, `address`, `attr_org`, `mgr_org`, `open_date`, `land_area`, `floor_area`, `longitude`, `latitude`) VALUES ('321283124S3001', '常泰高速服务区(北区)', '北区', 4, '泰州', 'S30如常高速', '常州方向', '江苏省泰州市泰兴市虹桥镇常泰高速常州方向', null, null, '2025-01-01', '72.5', '6000', '120.050937', '32.071956');
+INSERT INTO `adm_service_area` (`area_code`, `area_name`, `short_name`, `service_star`, `city`, `highway`, `direction`, `address`, `attr_org`, `mgr_org`, `open_date`, `land_area`, `floor_area`, `longitude`, `latitude`) VALUES ('321283124S3002', '常泰高速服务区(南区)', '南区', 4, '泰州', 'S30如常高速', '泰兴方向', '江苏省泰州市泰兴市虹桥镇常泰高速泰州方向', null, null, '2025-01-01', '72.5', '6000', '120.052389', '32.070408');
 
 -- ----------------------------
 -- 建筑基本信息表